Проблема в том, что вам может понадобиться перекомпилировать, если объект, который вы установили в загрузке вашего модуля, используется внутри программы. Причина в том, что ваша программа может не иметь последней версии сборки вашего класса. Например, если вы создаете новый конкретный класс для одного из ваших интерфейсов, допустим, вы изменили плагин dll. Теперь Injector загрузит его, но когда он будет возвращен внутри вашей программы (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, ваша настоящая программа не будет иметь никаких ссылок на ваш новый объект. Поэтому, как только вы загрузите из плагина BaseModule.cs, у вас могут возникнуть проблемы со ссылкой. Чтобы иметь возможность сделать это, вам нужно будет распространить новую dll этой конкретной реализации с вашим плагином, который будет иметь модуль, который потребуется Injector для загрузки класса Interface to Concrete. Это можно сделать без проблем, но вы начинаете иметь целое приложение, которое находится на загрузке из плагина, и это может быть проблематично в некоторых моментах. Будь в курсе.
НО, если вам нужна информация о плагине, вы можете получить учебник по в CodeProject .