c# - 使用 Unity 跨多种类型注入(inject)相同的 DataContext 实例

标签 c# dependency-injection unity-container datacontext

假设我有 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/

相关文章:

c# - 无法从 appsettings.json 读取数据

angular - 通过 Jest 和 Spectator 全局导入模块

c# - 单击列表中的所有弹出元素

c# - 嵌套的 gridview 获取父行

c# - Bot V4添加认证不提示用户登录

dependency-injection - Guice:将对象从已安装的模块注入(inject)到依赖的已安装模块

java - 尝试将 JpaRepository 注入(inject) AWS Lambda 时没有合格的 bean

c# - Unity 无法解析动态创建的类的实例

c# - 如何将 Unity 与内部类一起使用?

inversion-of-control - 如何在多项目解决方案中使用 Unity 进行解析