Инъекция и конфигурация - PullRequest
0 голосов
/ 09 января 2011

Раньше я использовал Castle в качестве IoC, но у меня была проблема с использованием Nhibernate / Castle (IoC) в том же проекте, поэтому я перешел в 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 и знаю, что, возможно, чего-то не хватает?

Ответы [ 3 ]

1 голос
/ 09 января 2011

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

-Ian

1 голос
/ 09 января 2011

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

0 голосов
/ 09 января 2011

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

...