您可以創建一個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