5

数週間、Simple Injector依存性注入コンテナーを使用して大きな成功を収めています。簡単に設定できるところが気に入っています。しかし、現在、構成方法がわからないデザインがあります。多くの型が派生する基本クラスがあり、基本クラスのプロパティに依存関係を挿入したいのですが、派生クラスごとに構成する必要はありません。属性でこれを実行しようとしましたが、Simple Injector は属性をサポートしていません。これは私のデザインの縮小版です。

public interface Handler<TMessage> where TMessage : Message
{
    void Handle(TMessage message);
}

public abstract class BaseHandler
{
    // This property I want to inject
    public HandlerContext Context { get; set; }
}

// Derived type
public class NotifyCustomerHandler : BaseHandler,
    Handler<NotifyCustomerMessage>
{
    public NotifyCustomerHandler(SomeDependency dependency)
    {
    }

    public void Handle(NotifyCustomerMessage message)
    {
    }
}

私の構成は次のようになります。

container.Register<HandlerContext, AspHandlerContext>();
container.Register<Handler<NotifyCustomerMessage>, NotifyCustomerHandler>();
// many other Handler<T> lines here

BaseHandler にプロパティを挿入するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

9

プロパティ注入に関するSimple Injector のドキュメントでは、これについて非常に明確な説明が提供されています。基本的なオプションは次のとおりです。

  • を使用して初期化デリゲートを登録しますRegisterInitializer
  • Simple Injector のPropertySelectionBehavior.

ドキュメントで説明されているRegisterInitializerように、依存関係のプロパティ インジェクションには の使用はお勧めしません。構成値のみ。

これにより、Simple Injector のPropertySelectionBehavior. 次の記事をご覧ください。基底クラスを持つことがなぜ悪い考えなのかを説明し、この記事ではその解決策を示します。

于 2011-06-03T12:39:01.067 に答える