如何使用 Unity 通过工厂注入依赖项

本文关键字:注入 依赖 工厂 何使用 Unity | 更新日期: 2023-09-27 18:34:56

>想象一下,我将通过工厂创建一些东西:

public sealed class MyClass
    : IMyClass
{
    private IMyDao MyDao { get; set; }
    public MyClass(IMyDaoFactory factory)
    {
        MyDao = factory.MyDao;
    }
}

这可以通过服务解决为:

public sealed class MyService
    : IMyService
{
    private readonly IMyClass myClass;
    public MyService(IMyDaoFactory factory)
    {
        myClass = new MyClass(factory);
    }
}

这很容易在 Unity 中连接起来,例如:

var container = new UnityContainer();
container.RegisterType<IMyService, MyService>();
container.RegisterType<IMyDaoFactory, MyDaoFactory>();
container.RegisterType<IMyClass, MyClass>();

注意到 MyClass 的注册,如何设置 Unity 以便它通过工厂自动注册和解析? 即我不再需要:

myClass = new MyClass(factory);

只:

this.myClass = myClass; (passed through the constructor 
                         as IMyClass and resolved by Unity)

希望这是有道理的。提前谢谢。

如何使用 Unity 通过工厂注入依赖项

尝试将 MyService 的构造函数切换为需要单个 IMyClass 实例;Unity 应自动填充其中的空白,并根据类型签名进行实例化。

public MyService(IMyClass _myClass)
{
    myClass = _myClass;
}

虽然我也会改名字,但是嗯。