Unity更改控制器的RegisterType(两个上下文)

时间:2015-08-12 08:42:23

标签: c# dependency-injection unity-container asp.net-web-api2

我的开关寄存器DI类型有问题。 我尝试了但是它不起作用:/

public FirstController([Dependency("GlobalContext")] IUnitOfWorkAsync context)
{
    _context = context;
}

public SecondController(IUnitOfWorkAsync context)
{
    _context = context;
}

container.RegisterType<IDataContextAsync, GlobalDataContext>("GlobalContext");
container.RegisterType<IDataContextAsync, TenantDataContext>();
container.RegisterType<IUnitOfWorkAsync, UnitOfWork>(new HierarchicalLifetimeManager());

public UnitOfWork(IDataContextAsync dataContext)
{
    _dataContext = dataContext;
    _repositories = new Dictionary<string, dynamic>();
}

可以做类似的事情,或者我必须为从IUnitOfWorkAsync到IDataContextAsync的路径做DI?

我只想告诉控制器使用那种DI类型。

在stackoverflow上,我发现了类似的问题With Unity how do I inject a named dependency into a constructor? 但它不一样,我需要在Controller中使用TenantDataContext创建IUnitOfWorkAsync实例,而不是同一个类(在我的问题TenantDataContext中)。

1 个答案:

答案 0 :(得分:0)

我找到了该问题的解决方案,它与建议的问题类似,但我需要做的更多是添加一个依赖的步骤。

container.RegisterType<IDataContextAsync, TenantDataContext>("TenantContext", new InjectionConstructor());
container.RegisterType<IUnitOfWorkAsync, UnitOfWork>("UnitOfWork", new InjectionConstructor(new ResolvedParameter<IDataContextAsync>("TenantContext")));

在第一篇文章的控制器中,我使用attr Dependency,但使用另一个字符串[&#34; UnitOfWork&#34;]