Castle Windsor IoC Property Injection einfache Anleitung

OK, ich denke, es gibt vielleichtzu viel Informationen zu Castle Windsor, da ich bei der Suche nach diesen Schlüsselwörtern Beispiele für alles erhalte, und ehrlich gesagt verstehe ich nicht genug darüber, wie dies funktioniert, um Fehler richtig zu beheben. Ich habe an dieser Stelle einige Permutationen mit wenig Glück ausprobiert.

ich habe einIUnitOfWorkFactory dass ich als Singleton instanziieren möchte. Also, ich installiere Castle Windsor, schreibe ein bisschen Code wie folgt:

iocContainer = new WindsorContainer()
    .Install(FromAssembly.This());

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>()
    .LifestyleSingleton()
    .Instance(new NHUnitOfWorkFactory())
    );

propInjector.Resolve<IUnitOfWorkFactory>();

Dies wird von meinem angerufenApplication_Start Methode.

ich habe einAccountController so verdrahtet:

public class AccountController : SecureController
{
    public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
    ...

... soweit ich das beurteilen kann, sollte dies nur "funktionieren" (obwohl ich nicht gefragt werde, wie). Aber meine Eigenschaft ist immer null, wenn ich versuche, sie zu verwenden.

Es scheint, als würde mir etwas Dummes und Einfaches fehlen, aber ich habe keine Ahnung, was es ist.

Ich habe es auch versucht

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>()
    .ImplementedBy<NHUnitOfWorkFactory>()
    .LifestyleSingleton()
    );

ohne erfolg.

Was mache ich falsch?

FAZIT

Mir fehlten hier einige Stufen. Ich hatte einen Installer und einen Bootstrapper pro gebautTutorial, aber ich habe meine Dienste am falschen Ort registriert ... bevor ich die Controller-Fabrik gebaut habe. Nun sieht mein Bootstrapper so aus:

iocContainer = new WindsorContainer()
    .Install(FromAssembly.This());

var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);

iocContainer.Register(
    Component.For<IUnitOfWorkFactory>()
    .ImplementedBy<NHUnitOfWorkFactory>()
    .LifestyleSingleton()
    );

... und meine Eigenschaftsinjektionen waren nicht mehr null .... jetzt muss ich nur noch die anderen 87 Probleme beheben ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage