如何使用Unity IoC在已解析的具体类型上指定构造函数值?

时间:2013-01-18 23:04:02

标签: c# dependency-injection unity-container

我看过很多帖子询问哪个重载了使用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类上定义该构造函数的值?

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要为DbContext添加注册:container.RegisterType<DbContext, AdventureWorks2008R2Entities>();

请记住,IoC容器的一个主要功能是自动连接。您无需告知每个注册要使用的实例。您只需将接口/类注册到实现中,并让它将内容放在正确的位置(并在您执行异常操作的极少数情况下覆盖)。

答案 1 :(得分:2)

我能够按照我的意愿使用InjectionConstructor课程,以下注册效果很好:

container.RegisterType<IUnitOfWork, UnitOfWork>(new InjectionConstructor(new AdventureWorks2008R2Entities()));

以下链接帮助我更好地理解了这一点:

Registering Injected Parameter and Property Values

相关问题