流畅的配置器/构建器和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方法。
你可以把一个工厂注入到你的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));