【问题标题】:How to specify constructor value on resolved concrete type using Unity IoC?如何使用 Unity IoC 在已解析的具体类型上指定构造函数值?
【发布时间】:2013-01-18 23:04:01
【问题描述】:

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

public class UnitOfWork : IUnitOfWork
{
    private DbContext _context;

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

}

所以现在我正在尝试使用 unity 将具体类型解析为如下界面:

container.RegisterType<IUnitOfWork, UnitOfWork>();

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

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

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

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

谢谢!

【问题讨论】:

    标签: c# dependency-injection unity-container


    【解决方案1】:

    您需要为一个 DbContext 添加注册:container.RegisterType&lt;DbContext, AdventureWorks2008R2Entities&gt;();

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

    【讨论】:

      【解决方案2】:

      我能够按照我的意图使用InjectionConstructor 类,并且以下注册运行良好:

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

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

      Registering Injected Parameter and Property Values

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 2011-04-12
        相关资源
        最近更新 更多