我正在试图找出一个正确的方法来注入一个需要参数的自动工厂,或者即使这可以通过Unity实现.
例如,我知道我可以这样做:
public class TestLog
{
private Func<ILog> logFactory;
public TestLog(Func<ILog> logFactory)
{
this.logFactory = logFactory;
}
public ILog CreateLog()
{
return logFactory();
}
}
Container.RegisterType<ILog, Log>();
TestLog test = Container.Resolve<TestLog>();
ILog log = test.CreateLog();
Run Code Online (Sandbox Code Playgroud)
现在我希望能做的是:
public class TestLog
{
private Func<string, ILog> logFactory;
public TestLog(Func<string, ILog> logFactory)
{
this.logFactory = logFactory;
}
public ILog CreateLog(string name)
{
return logFactory(name);
}
}
Container.RegisterType<ILog, Log>();
TestLog test = Container.Resolve<TestLog>();
ILog log = test.CreateLog("Test Name");
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我可以看到你如何设置自定义工厂来在Unity中创建实例,似乎无法为这个例子提供任何明确的例子.
显然我可以创建自己的工厂,但我正在寻找一种优雅的方式在Unity中以最少的代码执行此操作.