Я медленно преподавал основные принципы программирования, ориентированного на интерфейс, и я изо всех сил пытаюсь разобраться в нескольких принципах, касающихся инверсии управления, в частности с 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».
Теперь конструктор для моего класса хоста будет выглядеть следующим образом ....
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 таким образом, что он знает, что он должен называть мой параметризованный конструктор, когда я вызываю новый T()?
Примеры, которые я нашел в документации (что печально устарело), используют ядро для создания объекта, но я не хочу, чтобы в моих моделях содержался код ядра.
Я бы выполнил всю свою привязку в файле Global.ascx.
Благодарим за редактирование. Это облегчило чтение. –