2011-01-09 2 views
0

Раньше я использовал замок как IoC, но у меня была проблема с использованием Nhibernate/Castle (IoC) в том же проекте, поэтому я переехал в Ninject. Теперь, чтобы добраться до вопроса, у меня есть этот класс:Ninject и конфигурация

class CustomModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<Interfaces.ICafe>().To <Concrete.Tea>(); 
    } 
} 

Concrete является отдельным проектом и Interfaces.ICafe является другим проектом. С Castle я использовал разработчика DLL-интерфейсы и попросил его реализовать новый конкретный интерфейс, а затем настроить его с помощью app.config, поэтому независимо от того, какое имя класса он реализует, он все еще работает, потому что он должен написать это в app.config, поэтому, если бы он сделал это как Concrete.Coffee, он все равно работал бы.

Но с Ninject он должен сделать бетон с тем же названием класса «Чай», чтобы он работал иначе, это не сработало бы, потому что оно жестко закодировано.

Я новичок в Ninject, и я знаю, что, возможно, что-то мне не хватает?

ответ

1

В любом случае существует тенденция (среди людей, которых я знаю или придерживаюсь) для переноса привязок IoC в код и из XML. В основном b/c вы получаете intellisense и обратную связь от винтов. Итак, да, вы должны иметь ссылку на Concrete.Tea, если вы собираетесь так поступать.

1

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

-ian

+0

Вы можете предоставить мне образец? – Stacker

0

Я не использовал его, но есть кандидаты релиз для Ninject.Extensions.Xml, который позволяет вам настроить ваши отображения в XML. Однако я должен согласиться с Полом, и я, как правило, избегаю этого делать. Там также есть Ninject.Extensions.Conventions, который может быть тем, что вам нужно.

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