您可以创建一个IFactoryObject
,它返回null并将其配置到“特定应用程序”配置文件中。看到这个相关的问题:How do I configure a NULL object in Spring.Net。此外,如果Dep2是一个可选的依赖项(例如它可以为null或它有一个合理的默认值),那么最好将它定义为属性并使用属性注入。
编辑
我预计这个工作,但它实际上并没有,因为返回null的IFactoryObject
由Spring容器中的错误处理:
从上IFactoryObject.GetObject()
API文档
如果此方法被调用在一个封闭的IoC 容器和返回的上下文中,IoC容器 考虑吨他的工厂对象没有完全初始化,并且抛出相应的(并且很可能是致命的)异常 。
类:
public class MyClass
{
public MyOtherClass Prop { get; set; }
public MyClass(MyOtherClass ref1)
{
}
}
public class MyOtherClass
{
}
public class NullFactoryObject : IFactoryObject
{
public object GetObject()
{
return null;
}
public Type ObjectType
{
get { return typeof(MyOtherClass); }
}
public bool IsSingleton
{
get { return true; }
}
}
在configfile1.xml
:
<object id="MyObject" type="q9292066_null_object_reference.MyClass, q9292066_null_object_reference">
<constructor-arg name="ref1" ref="ref1" />
</object>
在configfile2.xml
:
<object id="ref1"
type="q9292066_null_object_reference.NullFactoryObject, q9292066_null_object_reference" />
Marijn,你能澄清这个多一点。我实现了O1FactoryObject。推荐将Dep1/Dep2传递给O1FactoryObject的方法是什么?如果我通过它作为财产/ constrcutor ref,我将面临与我的问题相同的问题。如果我将Dep1/Dep2作为简单字符串传递,我需要在O1FactoryObject代码中获取它们。那是正确的解决方案?连同依赖于处理初始化顺序?谢谢。 – Filip 2012-02-17 13:48:48
我会添加一些代码... – Marijn 2012-02-17 15:12:57
完成...尚未测试,将在稍后执行。 – Marijn 2012-02-17 15:17:27