6

OK ウィンザー城に関する情報が多すぎると思います。これらのキーワードを検索するとすべての例が得られるからです。率直に言って、これを適切にトラブルシューティングする方法について十分に理解していません。私はこの時点でほとんど運がなく、かなりの数の順列を試しました。

IUnitOfWorkFactoryシングルトンとしてインスタンス化したい があります。それで、Castle Windsor をインストールし、次のようなコードを少し書きます。

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

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

propInjector.Resolve<IUnitOfWorkFactory>();

これは私のApplication_Startメソッドから呼び出されます。

私は次のAccountControllerように配線しています:

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

...私が理解できる限り、これは単に「機能する」はずです(ただし、方法は聞かないでください)。しかし、プロパティを使用しようとすると、常に null になります。

ばかげた単純なものが欠けているようですが、それが何であるかわかりません。

私も試してみました

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

成功しませんでした。

私は何を間違っていますか?

結論

ここでいくつかの手順がありませんでした。チュートリアルに従ってインストーラーとブートストラップを作成しましたが、サービスを間違った場所に登録しました... コントローラー ファクトリを作成する前に。今、私のブートストラップは次のようになります。

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

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

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

...そして、私のプロパティインジェクションはもはやnullではありませんでした....今、私は他の87の問題をデバッグする必要があります...

4

1 に答える 1

7

ルート オブジェクトがコンテナーによって解決されると、コンストラクターとプロパティの注入の両方が機能します。この場合、yourAccountControllerは、Windsor が作成する必要があるルート オブジェクトになります。

これを接続するには、コントローラ ファクトリを使用する必要があります。コントローラーが登録され、コンテナーによって解決されると、すべてが期待どおりに機能するはずです。

于 2013-03-15T23:35:18.717 に答える