.net 基于委托的构造函数参数
我有一个例子,我需要Unity在“解析”期间而不是在注册期间捕获构造函数值。请注意此扩展:.net 基于委托的构造函数参数,.net,dependency-injection,unity-container,.net,Dependency Injection,Unity Container,我有一个例子,我需要Unity在“解析”期间而不是在注册期间捕获构造函数值。请注意此扩展: public class DataAccessRegistry : UnityContainerExtension, IDataAccessConfig { [ThreadStatic] static string connection = ""; protected override void Initialize() { Container.Regis
public class DataAccessRegistry : UnityContainerExtension, IDataAccessConfig
{
[ThreadStatic]
static string connection = "";
protected override void Initialize()
{
Container.RegisterType<DataAccess>(
new InjectionProperty("log"),
new InjectionConstructor(connection));
}
public IDataAccessConfig WithConnection(string connectionString)
{
connection = connectionString;
return this;
}
}
委托完成了它的工作并修复了问题,但是现在InjectionProperty(“log”)
不起作用,因为它被忽略了。当Unity看到InjectionFactory
时,它会忽略InjectionProperty
所以现在我认为解决方案是有一个接受委托的自定义InjectionParameter
。但我想知道,如果没有这种定制,是否还有其他方法可以做到这一点
我使用的是Unity2.1,但如果它有助于解决此问题,则可以升级。我也很好奇其他.NETIOC容器如何解决这个问题
p、 在我的例子中,“log”属性是用一个函数来处理的,但这只是琐事——与回答这个问题无关
Container.RegisterType<DataAccess>(
new InjectionProperty("log"), //custom BuildStrategy again.
new InjectionFactory(c =>
{
var dao = new DataAccess(connection);
c.BuildUp(dao); //Try to make custom BuildStrategy apply.
return dao;
}));