El problema es que es posible que deba volver a compilar si el objeto que configura en la carga de su módulo se utiliza dentro del programa. La razón es que su programa podría no tener la última versión del ensamblaje de su clase. Ejemplo, si crea una nueva clase concreta para una de sus interfaces, supongamos que cambia el plugin dll. Ahora, Injector lo cargará, bien, pero cuando se devolverá dentro de tu programa (kernel.get (...)) tu programa podría no tener el ensamblado y lanzará un error.
Ejemplo de lo que estoy hablando:
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
}
}
Si tiene crear un nuevo cuatro cilindros llamada de seis cilindros, el programa real no tendrá ninguna referencia a su nuevo objeto. Por lo tanto, una vez que cargues desde el PlugIn the BaseModule.cs, es posible que tengas problemas con la referencia. Para poder hacerlo, tendrá que distribuir el nuevo dll de esta implementación concreta con su complemento que tendrá el Módulo que el Injector necesitará para cargar la clase Interface to Concrete. Esto se puede hacer sin problemas, pero comienza a tener una aplicación completa que reside en la carga desde el complemento y puede ser problemático en algunos puntos. Ten cuidado
PERO, si desea obtener información sobre el PlugIn, puede obtener tutorial from CodeProject.
No sé por qué esto fue rechazado. Es técnicamente preciso y una respuesta válida. –
Puede ser porque no quiere saber cómo crear un complemento, sino cómo usar DI y cambiar su DI sin tener que compilar ... así que sugirió el complemento ... –
No te he votado por error: P ¿Por qué me votas? De todos modos, gracioso –