流畅的配置器/构建器和IoC容器

本文关键字:IoC 容器 构建 配置 | 更新日期: 2023-09-27 18:04:50

我正要为我的类创建一个流畅的配置器/构建器,当我意识到我不知道如何将它与我的IoC容器一起使用。

假设我像这样创建一个类和一个构建器。

class MyClass
{
    private ILog _log;
    // here I want the ILog object from my container and configParameter1 from my builder.
    internal MyClass(ILog log, int configParameter1)
    {
    }
}
class MyClassBuilder
{
    private int _param1;
    private MyClassBuilder () {}
    public static MyClassBuilder Begin()
    {
        return new MyClassBuilder();
    }
    public MyClassBuilder SetParameter1(int param1)
    {
        _param1 = param1;
        return this;
    }
    public MyClass Build()
    {
        // Here I want to inject a ILog object from my container
        return new MyClass(?!?, _param1);
    }
}

类MyClass依赖于我的容器中注册的类型和来自构造器的参数。解决这个问题的最好方法是什么?MyClassBuilder应该依赖ILog吗?如果是这样,我就不能在构建器中使用静态Begin方法。

流畅的配置器/构建器和IoC容器

你可以把一个工厂注入到你的MyClassBuilder:

class LogFactory
{
    public ILog CreateLogger(){
    }
}

然后你可以要求这个LogFactory被注入到你的构建器中:

class MyClassBuilder
{
    public MyClassBuilder(LogFactory factory)
    {
        _factory = factory;
    }
    // ... Builder methods
    public MyClass Build()
    {
        return new MyClass(_factory.CreateLogger(), _param1);
    }
}

你就不能把ILog注入到MyClass或者像这样使用smth吗?

private static ILog logger = LogManager.GetLogger(typeof(MyClass));