我看过很多帖子询问哪个重载了使用Unity选择的构造函数,但我的问题有点不同,我无法弄清楚答案。我有以下类继承接口(部分代码):
public class UnitOfWork : IUnitOfWork
{
private DbContext _context;
public UnitOfWork(DbContext context)
{
_context = context;
}
}
所以现在我正在尝试使用unity来解决接口的具体类型,如下所示:
container.RegisterType<IUnitOfWork, UnitOfWork>();
但是,我需要在解析后将我的Entity Framework上下文传递给该具体类型。我希望做这样的事情:
container.RegisterType<IUnitOfWork, UnitOfWork(new AdventureWorks2008R2Entities())>();
当然我知道上面的代码是不正确的,并且已经阅读了有关使用InjectionConstructor
类的内容,但我认为这不适用于此。
所以我的问题是,在使用Unity IoC解析具体类型时,如何在UnitOfWork
类上定义该构造函数的值?
谢谢!
答案 0 :(得分:2)
您需要为DbContext添加注册:container.RegisterType<DbContext, AdventureWorks2008R2Entities>();
请记住,IoC容器的一个主要功能是自动连接。您无需告知每个注册要使用的实例。您只需将接口/类注册到实现中,并让它将内容放在正确的位置(并在您执行异常操作的极少数情况下覆盖)。
答案 1 :(得分:2)
我能够按照我的意愿使用InjectionConstructor
课程,以下注册效果很好:
container.RegisterType<IUnitOfWork, UnitOfWork>(new InjectionConstructor(new AdventureWorks2008R2Entities()));
以下链接帮助我更好地理解了这一点: