Проблема в том, что вам может потребоваться перекомпилировать, если объект, который вы устанавливаете при загрузке вашего модуля, используется внутри программы. Причина в том, что у вашей программы может быть не последняя версия сборки вашего класса. Например, если вы создаете новый конкретный класс для одного из ваших интерфейсов, скажем, вы меняете плагин dll. Теперь инжектор будет загружать его, но если он будет возвращен внутри вашей программы (kernel.get (...)), ваша программа может не иметь сборки и выдает ошибку.
Пример того, что я говорю:
BaseAuto auto = kernel.Get<BaseAuto>();//Get from the NInjector kernel your object. You get your concrete objet and the object "auto" will be filled up (interface inside him) with the kernel.
//Somewhere else:
public class BaseModule : StandardModule
{
public override void Load(){
Bind<BaseAuto>().ToSelf();
Bind<IEngine>().To<FourCylinder>();//Bind the interface
}
}
Если у вас есть создать новый FourCylinder под названием SixCylinder, ваша реальная программа не будет иметь каких-либо ссылок на ваш новый объект. Итак, как только вы загрузите из PlugIn BaseModule.cs, вы можете столкнуться с проблемой. Чтобы это сделать, вам нужно будет распространять новую DLL этой конкретной реализации с вашим плагином, у которого будет модуль, который Инжектор потребует загрузить класс Interface to Concrete. Это можно сделать без проблем, но вы начинаете иметь целое приложение, которое находится при загрузке из плагина, и в некоторых случаях это может быть проблематично. Имейте в виду.
НО, если вам нужна информация о подключаемом модуле, вы можете получить tutorial from CodeProject.
Не знаю, почему это было отклонено. Это технически точный и действительный ответ. – 2008-12-01 14:12:07
Возможно, это потому, что он не хочет знать, как создать плагин, но как использовать DI и изменить его DI без необходимости компилировать ... поэтому он предложил плагин ... – 2008-12-01 14:13:27
Я вас не проголосовал: P почему ты проголосуешь за меня ... в любом случае смешно – 2008-12-01 14:15:09