Das Problem ist, dass Sie möglicherweise neu kompilieren müssen, wenn das Objekt, das Sie beim Laden Ihres Moduls eingerichtet haben, innerhalb des Programms verwendet wird. Der Grund dafür ist, dass Ihr Programm möglicherweise nicht die neueste Version der Assembly Ihrer Klasse hat. Wenn Sie beispielsweise eine neue konkrete Klasse für eine Ihrer Schnittstellen erstellen, ändern Sie die Plugin-DLL. Der Injector lädt sie, aber wenn sie in Ihrem Programm zurückgegeben wird (kernel.get(...)), hat Ihr Programm möglicherweise die Assembly nicht und gibt einen Fehler aus.
Ein Beispiel dafür, wovon ich spreche:
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
}
}
Wenn Sie einen neuen FourCylinder mit dem Namen SixCylinder erstellt haben, wird Ihr echtes Programm keinen Bezug zu Ihrem neuen Objekt haben. Sobald Sie also das BaseModule.cs aus dem PlugIn laden, könnten Sie Probleme mit der Referenz bekommen. Um dies zu beheben, müssen Sie die neue DLL dieser konkreten Implementierung mit Ihrem Plugin verteilen, das das Modul enthält, das Injector benötigt, um die Klasse Interface to Concrete zu laden. Dies kann ohne Probleme gemacht werden, aber Sie fangen an, eine ganze Anwendung zu haben, die auf dem Laden vom Plugin basiert und das könnte in einigen Punkten problematisch sein. Seien Sie sich dessen bewusst.
ABER, wenn Sie einige PlugIn-Informationen benötigen, können Sie diese bekommen Lernprogramm von CodeProject .