【发布时间】:2011-10-17 23:27:37
【问题描述】:
这可能是一个奇怪的情况,但我有时想在使用 MEF 获取导出时重用同一个实例,有时会创建一个新实例。
基本上我有一个 WCF 服务类,每次调用都是实例。每个实例导入一个 RepositoryFactory,它也是每个服务类的新实例。我在工厂中返回一个存储库,并且一个存储库注入了一个 IDbContext。
我希望 Factory 的每个实例都注入相同的 IDbContext 实例,但在 Factory 实例之间具有单独的实例。
所以:
1) Factory1 is created
2) Factory1 creates Repository1-1 that gets IDbContext1 injected
3) Factory1 creates Repository1-2 that gets IDbContext1 injected
4) Factory2 is created
5) Factory2 creates Repository2-1 that gets IDbContext2 injected
6) Factory2 creates Repository2-2 that gets IDbContext2 injected
这应该确保从同一工厂创建的存储库共享一个工作单元。
但作为 MEF 的新手,我不知道该怎么做。
编辑
这是我得到的:
public class RepositoryFactory
{
private readonly CompositionContainer _container;
[Import(RequiredCreationPolicy=CreationPolicy.NonShared)]
private readonly IDbContext _context;
public IRepository<T> CreateRepository<T>() where T : class, IEntity
{
//Somehow add the _context instance into the Repository import
return _container.GetExportedValue<EntityRepository<T>>();
}
}
然后
public class EntityRepository<T> : IRepository<T> where T : class, IEntity
{
// Perhaps a contract name might help!!
[Import(RequiredCreationPolicy=CreationPolicy.Shared)]
protected readonly IDbContext _context;
【问题讨论】:
-
我的一个想法是将上下文导入工厂并以某种方式使其成为将导出到创建的存储库的实例。
-
除了 Unity the IoC container stackoverflow.com/questions/787001/…,这里是同样的问题
标签: dependency-injection repository mef unit-of-work