2009-04-01 2 views
0

Мне недавно пришлось обновить относительно большую библиотеку управления, которая использует Ninject 1.0 для Ninject 2.0, чтобы помочь решить некоторые проблемы, которые у меня были с 1.0. Обновление прошло хорошо, и я думаю, что Ninject 2.0 намного быстрее.Инверсия управления для вашего обращения контейнера управления?

Однако, чтобы попытаться избежать этой проблемы в будущем, я создал свой собственный интерфейс для ввода полей и свойств (которые по существу вызовут методы в контейнере IOC, которые я хочу использовать в текущем веб-приложении). Итак, теперь моя библиотека управления не зависит от какого-либо конкретного контейнера IOC, что ускорит любые изменения в этой области в будущем.

Мне было интересно, имеет ли кто-нибудь еще то же самое?

Я доволен тем, что он достиг, но в идеале я хотел бы его обновить. В моих элементах управления я создаю эти введенные поля часто как защищенные и устанавливаю их в конструкторе для этого элемента управления.

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(ref _blogService); 
    Inject(ref _emailService); 
} 

У меня есть проблема с выше, что я должен использовать «реф» на все объекты на самом деле установить свойство, и я не могу использовать это на свойства напрямую.

Я бы предпочел сделать что-то в этом направлении, но я не думаю, что это возможно.

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(_blogService, _emailService); 
} 

У кого-нибудь есть идеи о том, как очистить код или сделать его более чистым? Я также хотел бы избежать атрибутов, поэтому он заставляет разработчика принимать решение о вводе переменной в определенную точку элемента управления.

Все мысли и чувства приветствуются.

Thanks

+0

Я думаю, что отсутствие доступа к конструкции пользовательских элементов управления (неспособность изменить способ создания конструктора) является одной из неприятных вещей об элементах управления ASP.NET. Извините, у меня нет никакого полезного ответа. –

ответ

1

Поддержка впрыска свойств и вложение зависимостей к «этому».

В моем случае, у меня есть базовый класс, который вызывает StructureMap.BuildUp (это), и пользовательский элемент управления будет иметь такие свойства, как:

public IBlogService _blogService{get;set;} 
public IEmailService _emailService{get;set;} 

Единственная линия, характерные для StructureMap у меня есть в базе класс. Если ninject позволяет это сделать, вы можете вызвать свой код, передавая ему экземпляр управления, и пусть он вводит свойства на основе его конфигурации.

1

Вы можете посмотреть на IServiceLocator, как описано Glenn Block

Это общий интерфейс, который может быть использован, чтобы воспользоваться IoC без учета жесткой зависимости от контейнера.

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