2010-09-11 10 views
0

Я медленно преподавал основные принципы программирования, ориентированного на интерфейс, и я изо всех сил пытаюсь разобраться в нескольких принципах, касающихся инверсии управления, в частности с 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.

+0

Благодарим за редактирование. Это облегчило чтение. –

ответ

1

В ответ на мой вопрос выясняется, что мой подход был неправильным.

Снятие статических методов и использование контроллеров mvc для бизнес-логики привело к значительно лучшему разделению и значительно более чистым и более удобному для использования коду. Тогда привязывать все к ninject было намного проще.

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