假设我有 IRepository 接口(interface)及其实现 SqlRepository,它将 LINQ to SQL DataContext 作为参数。还假设我有 IService 接口(interface)及其采用三个 IRepository、IRepository 和 IRepository 的实现服务。演示代码如下:
public interface IRepository<T> { }
public class SqlRepository<T> : IRepository<T>
{
public SqlRepository(DataContext dc) { ... }
}
public interface IService<T> { }
public class Service<T,T1,T2,T3> : IService<T>
{
public Service(IRepository<T1> r1, IRepository<T2>, IRepository<T3>) { ... }
}
在创建服务类时是否可以通过相同的 DataContext 注入(inject)所有三个存储库?
最佳答案
您需要做的就是确保在您的 Unity 容器中注册 Datacontext
时在配置中使用 PerResolveLifetimeManager
:
<type type="<namespace>.DataContext, <assembly>">
<lifetime type="Microsoft.Practices.Unity.PerResolveLifetimeManager, Microsoft.Practices.Unity" />
</type>
或在代码中:
container.RegisterType<DataContext>(new PerResolveLifetimeManager());
然后,每当容器解析 Service
时,任何还需要 DataContext
的依赖项都将提供完全相同的服务。但是下一个解析 Service
的请求将创建一个新的 DataContext
。
关于c# - 使用 Unity 跨多种类型注入(inject)相同的 DataContext 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897205/