0

ディクショナリアダプタを実装する複数のコンポーネントを登録したいのですが、AllTypes.From..はクラスタイプのみを選択します。私はこのようなことをしたい:

        container.Register(AllTypes.FromAssemblyContaining<IFooSettings>()
            .Where(type => type.IsInterface)
            .Configure(component =>
                component.UsingFactoryMethod((kernel, model, creationContext) => new DictionaryAdapterFactory().GetAdapter(creationContext.RequestedType, ConfigurationManager.AppSettings))));

FromTypesDescriptor ctorが内部にあるため、独自のバージョンの「AllTypes」を作成できないようです。これをどのように達成できるかについてのアイデアはありますか?

4

2 に答える 2

1

これはCastle3.3.0で機能するようになりました。

var dictionaryAdapterFactory = new DictionaryAdapterFactory();

container.Register(
        Types.FromThisAssembly().Where(t => t.Name.EndsWith("Settings") && t.IsInterface)
            .Configure(component => component.UsingFactoryMethod((kernel, model, creationContext) => dictionaryAdapterFactory.GetAdapter(creationContext.RequestedType, ConfigurationManager.AppSettings))));

インターフェイスも取得する「タイプ」を使用する必要があります

于 2016-06-22T06:50:53.167 に答える
0

私はこのようなことをします

    container.Register(
        AllTypes
            .FromThisAssembly()
            .Pick()
            .WithService.DefaultInterface()
            .Configure(r => r.LifeStyle.Transient));

これは、一致するインターフェースとクラス名に基づいてコンポーネントを登録します。

したがって、Castleにというインターフェイスを要求するとIFooSettings、Castleはデフォルトでクラスを返しますFooSettings

登録に使用できる一連のルールがあり、ここでそれらを確認できます。例で使用しているファクトリメソッドを使用することはお勧めしません。

于 2012-09-14T14:15:35.287 に答える