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

本文关键字:类型 构造函数 Unity 何使用 IoC | 更新日期: 2023-09-27 17:54:14

我看过很多关于使用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类上定义构造函数的值?

谢谢!

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

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

请记住,IoC容器的一个主要特性是自动连接。您不需要告诉每个注册要使用哪个实例。您只需将接口/类注册到实现中,并让它将内容放在正确的位置(并在您执行异常操作的理想情况下重写)。

我能够使用InjectionConstructor类,因为我想和以下注册工作良好:

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

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

注册注入参数和属性值