2

CastleWindsorの流暢なインターフェースを使いたかったのです。これは.NET2.0の「リリース」バイナリでは利用できないため、トランクからコンパイルしました。これはかなり安定していると報告されています。私はちょうどコンパイルしました:

  • Castle.Core.dll
  • Castle.DynamicProxy.dll
  • Castle.MicroKernel.dll
  • Castle.Windsor.dll

これは私がそれを必要とするものに必要なすべてであるはずですが、物事は期待どおりに機能していません。次のコードを使用して、反復処理し、各アセンブリに含まれるすべてのタイプをロードしようとするアセンブリコレクションがあります。

var container= new WindsorContainer();
foreach (var assembly in _assemblies)
{
    container.Register(AllTypes.FromAssembly(assembly));
} 

デバッガーを使用してコードをステップ実行しました。_assemblies2つのアセンブリがあります。各アセンブリには、多数のタイプが定義されています。ループはエラーなしで2回繰り返されますが、完了しcontainerても空のままです。

更新:少し説明します。最新のバイナリには流暢なインターフェイスがありますが、.NET3.5フレームワークを対象としています。.NET2.0を使用しています。.NET2.0をサポートする最新のバイナリリリースはRC3でした。

4

1 に答える 1

4

... 構文はRegister(AllTypes始まりにすぎません。登録したいものを Windsor に伝える必要があります。

たとえば、すべてのコントローラを取得するには:

container.Register(AllTypes
         .FromAssemblyContaining(representativeControllerType)
         .BasedOn<Controller>()
         .Configure(reg => reg
             .LifeStyle.PerWebRequest));

名前が「サービス」で終わるすべてのクラスを登録する必要があるという規則に従って登録する別の例を次に示します。

container.Register(AllTypes
        .FromAssemblyContaining<ConfigurationService>()
        .Where(t => t.Name.EndsWith("Service", StringComparison.Ordinal))
        .WithService.FirstInterface()
        .Configure(reg => reg.LifeStyle.PerWebRequest));

本当にすべての型を登録したい場合は、常に true を返す Where 句を記述できます。

デフォルトでは、Windsor は具象型を自動解決しません

流暢な登録 API の詳細については、ドキュメントを参照してください。

于 2009-12-28T14:33:16.770 に答える