1

特定の(文字列ベースの)MessageTypeに基づいて、型付きメッセージとxmlベースのメッセージの両方を処理できるシステムを設計しています。理想的には、これらのメッセージを処理するために、次のような一連のプロバイダーを使用したいと思います。

[MessageType("CreateWorkOrder")]
public class CreateWorkOrderMessageProcessingProvider: IMessageProcessingProvider
{
    ...

次に、Windsor内で「CreateWorkOrder」という名前で解決します。次のバリエーションを使用して(MessageType属性を使用して)名前で登録できるかどうか疑問に思っています。

container.Register(Classes.FromAssemblyContaining<IMessageProcessingProvider>().Where(t => Attribute.IsDefined(t, typeof(MessageTypeAttribute))));

または、カスタムリゾルバーを提供する必要がありますか?ここで実装するためのより良いパターンがあれば、私はそれを聞いてうれしいです。

4

1 に答える 1

2

このメソッドを使用してConfigure()、Windsorが構築するComponentModelでこのようなカスタマイズを行うことができます。これは、属性値を検索して名前に割り当てるサンプルですが、このコードではエラーチェックはありません(属性がNameプロパティを公開しているという前提があります)。

container.Register(
    Classes.FromAssemblyContaining<IMessageProcessingProvider>()
        .Where(t => Attribute.IsDefined(t, typeof (MessageTypeAttribute)))
        .Configure(c =>
                    {
                        var name =
                            ((MessageTypeAttribute)
                             c.Implementation.GetCustomAttributes(typeof (MessageTypeAttribute), false)[0]).Name;
                        c.Named(name);
                    }));
于 2012-10-17T00:02:45.957 に答える