с помощью конструктора инъекции, зависимость получает инъекции потребителю, как это (по крайней мере, я надеюсь, я правильно понял):пункт охраны и Нуль шаблон объекта в Dependency Injection и С #
public class SomeConsumer
{
private IDependency someDependency;
public SomeConsumer(IDependency someDependency)
{
if (someDependency != null)
{
this.someDependency = someDependency;
}
else
{
throw new ArgumentNullException("someDependency");
}
}
public void Baz()
{
someDependency.DoSomething();
}
(...)
}
Если бы я использовать шаблон Null Object for IDependency, мне нужно предложение охраны? Или неправильно вводить нулевой объект?
UPDATE: Для уточнения, давайте предположим, что у меня есть классы и интерфейсы, как это:
public interface IDependency
{
void DoSomething();
}
public class NullDependency : IDependency
{
public void DoSomething()
{
//Do nothing...
}
}
public class RealDependency : IDependency
{
public void DoSomething()
{
Console.WriteLine("Did something");
}
}
public class Foo
{
public void Bar()
{
IDependency dependency = new NullDependency();
SomeConsumer sc = new SomeConsumer(dependency);
sc.Baz();
}
}
Могу ли я тогда безопасно удалить пункт охраны от SomeConsumer, делая его похожим на:
public class SomeConsumer
{
private IDependency someDependency;
public SomeConsumer(IDependency someDependency)
{
this.someDependency = someDependency;
}
public void Baz()
{
//if someDependency is a NullDependency, this does nothing
someDependency.DoSomething();
}
(...)
}
Или я должен использовать предложение guard, потому что не могу быть уверенным, что null
никогда не будет введено?
Я забыл добавить исключение, вопрос обновлен. – Thaoden