0

Просто интересно, имел ли кто-нибудь этот сценарий с Unity (как контейнер IoC), где у класса есть две введенные зависимости (интерфейсы), где одна зависимость может быть нулевой. Например:Включение нулевой зависимости с помощью конструктора требует единства для регистрации этой нулевой зависимости.

public MyServiceDll(IRepository repository, ICanBeNullDependency canBeNullDependency = null) 
{ 
    _repository = repository; 
    _canBeNullDependency = canBeNullDependency; 
} 

ICanBeNullDependency - это другая сборка. MyServiceDll - еще одна сборка. На MyServiceDll ссылается web api и вводит свой интерфейс в один из контроллеров. ICanBeNullDependency может быть пустым, так что я не нужно зарегистрировать реализацию этого интерфейса в unityconfig.cs, но когда контроллер вызывается это будет ошибка говоря:

The current type, ICanBeNullDependency, is an interface and cannot be constructed. Are you missing a type mapping?

ответ

2

Для зависимостей, которые не всегда требуется, вам может использовать null object pattern.

public interface ICanBeNullDependency 
{ 
    void DoSomething(); 
} 

public class AcutallyDoSomething : ICanBeNullDependency 
{ 
    public void DoSomething() 
    { 
     Console.WriteLine("something done"); 
    } 
} 

public class NullDoSomething : ICanBeNullDependency 
{ 
    public void DoSomething() 
    { 
     // Do nothing - this class represents a null 
    } 
} 

Тогда, если вы хотите «нулевое состояние», вы вводите экземпляр нулевого класса.

Главное преимущество над тем, чтобы сделать переменную null, что вам не нужна условная логика в вашем сервисе, чтобы иметь дело с нулевым значением, и, конечно, это DI-friendly.

+0

Я бы даже сказал, что «вы должны *** использовать шаблон нулевого объекта». – Steven

 Смежные вопросы

  • Нет связанных вопросов^_^