2

我看到很多帖子询问使用 Unity 选择哪个重载构造函数,但我的问题有点不同,我无法弄清楚答案。我有以下类继承一个接口(部分代码):

public class UnitOfWork : IUnitOfWork
{
    private DbContext _context;

    public UnitOfWork(DbContext context)
    {
        _context = context;
    }

}

所以现在我正在尝试使用统一来将具体类型解析为如下接口:

container.RegisterType<IUnitOfWork, UnitOfWork>();

但是,我需要在解析时将我的实体框架上下文传递给该具体类型。我想做这样的事情:

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

当然,我知道上面的代码是不正确的,并且已经阅读了有关使用InjectionConstructor该类的信息,但我认为这不适用于这里。

UnitOfWork所以我的问题是,在使用 Unity IoC 解析具体类型时,如何在类上定义该构造函数的值?

谢谢!

4

2 回答 2

2

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

请记住,IoC 容器的一个主要功能是自动连接。您不需要告诉每个注册使用哪个实例。您只需将接口/类注册到实现并让它把东西放在正确的位置(并在极少数情况下您正在做一些不正常的事情时覆盖)。

于 2013-01-19T00:52:53.153 回答
2

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

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

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

注册注入的参数和属性值

于 2013-01-21T14:36:50.753 回答