Вы можете создать IFactoryObject
, который возвращает ноль, и настроить его в своем конфигурационном файле "конкретного приложения".См. Этот связанный вопрос: Как настроить объект NULL в Spring.Net .
Кроме того, если Dep2 является необязательной зависимостью (например, она может быть нулевой или имеет разумное значение по умолчанию)чем, вероятно, лучше определить его как свойство и использовать внедрение свойства.
Редактировать
Я ожидал, что это сработает, но на самом деле это не так, потому что IFactoryObject
, возвращающий ноль, обрабатывается контейнером пружины как ошибка:
Из документации API на IFactoryObject.GetObject()
Если этот метод вызывается в контексте вмещающего контейнера 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" />