我的开关寄存器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中)。
答案 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;]