Я медленно изучал основы программирования, управляемого интерфейсом, и изо всех сил стараюсь обдумать несколько принципов, касающихся инверсии управления, в частности, с помощью Ninject.
Допустим, у меня есть конкретная моделькласс следующим образом ...
public sealed class Host : EntityAuditable<Host, Guid>
У меня есть базовый класс, который определяет методы для модели, как это ....
public abstract class EntityAuditable<T, TKey> :
IEntity,
IDisposable,
IComparable<EntityAuditable<T, TKey>>
where T : EntityAuditable<T, TKey>, new()
IEntity - очень простой интерфейс, который определяетсвойство объекта 'Id'.
Теперь конструктор для моего класса Host будет выглядеть следующим образом ....
public Host(IService<Host> service)
{
this.service = service;
this.id = Guid.NewGuid();
}
Где реализация IService предоставляет методы для сохранения объектов в репозитории, специфичном длясервис.
Я хотел бы предоставить некоторые статические методы в своем базовом классе, чтобы я мог написать код, подобный
Host.LoadAll();
, и знать, что мои привязки будут введены правильно.Моя реализация в базовом классе была бы похожа на это ...
public static IList<T> LoadAll()
{
T instance = new T();
List<T> instances = new List<T>(instance.DataSelectAll());
// Clean up the instance.
instance.Dispose();
return instances;
}
Возможно ли это, или я делаю что-то в корне неправильно?
Работает ли Ninject так, как ему известноон должен вызывать мой параметризованный конструктор, когда я вызываю new T ()?
Примеры, которые я нашел в документации (что, к сожалению, устарело), используют ядро для создания объекта, но я не хочучтобы ядро создавало код в моих моделях.
Я бы делал все свои привязки в моем файле Global.ascx.