Давать следующий пример:Всегда Действительный Entity и Constructor Injection
class Customer
{
ICustomerRepository repository;
private string name;
public Customer(string name, ICustomerRepository repository)
{
Name = name;
this.repository= repository;
}
public string Name
{
get {return name;}
set
{
if(String.IsNullOrWhiteSpace(value))
throw new ArgumentException();
name = value;
}
}
}
- Я использую Ninject IoC.
- Я абстрагирую контейнер ninject в интерфейсе IFactory, который имеет метод Get <>(), поэтому я хочу использовать только инъекцию конструктора. Я делаю это, потому что я не хочу использовать атрибуты [Inject].
- Я хочу следовать принципу всегда действительной сущности.
В этом случае я не могу этого сделать, потому что у меня есть параметр в конструкторе. Есть ли другой подход к этому?
Edit:
- я отвлекаюсь Ninject контейнер в интерфейсе IFactory, который имеет метод Get <>(), так что я хочу использовать только инъекции конструктора. Я делаю это, потому что я не хочу использовать атрибуты [Inject].
Абстракция моего контейнера:
interface IFactory
{
T Get<T>();
IEnumerable<T> GetAll<T>();
}
Реализация:
class ApplicationFactory : IFactory
{
private readonly IKernel ninjectKernel = ApplicationNinjectKernel.BuildNew();
public T Get<T>()
{
return ninjectKernel.Get<T>();
}
public IEnumerable<T> GetAll<T>()
{
return ninjectKernel.GetAll<T>();
}
}
ApplicationNinjectKernel.BuildNew() создает и возвращает новый StandarKernel() с оков ..
Конструктор Аргумент звучит плохо для меня. При таком подходе я добавлю некоторые уродливые вещи в свой код, а также пропущу проверку типа во время проекта. :/
Почему вы пытаетесь следовать принципу «Всегда действительная сущность». Вы знаете, что это анти-шаблон? http://jeffreypalermo.com/blog/the-fallacy-of-the-always-valid-entity/ –
Посмотрите: https://andyhitchman.wordpress.com/2009/05/15/the-always-valid -entity-is-not-a-fallacy/ –
Мне что-то не хватает. в чем именно проблема?: –