1

私が必要としているのは、各 dll に特定のイベント タイプの具象クラスを登録することです。

public interface IDomainEventHandler<T> where T : IDomainEvent
{
    void Handle(T domainEvent);
}

同じハンドラーが継承されたクラスで何度も登録および実行されるため、EventHandlers をスキャンしたくありませんが、各 dll の初期化メソッドを構造マップ ブートラッパーで呼び出す必要があります。

したがって、各dll(モジュール)に次のようなものを含めます

    public void SetEntityEventHandlers()
    {
        ObjectFactory.Initialize(x =>
               {
                   x.For<IEntityBeforeUpdateEvent<Person>>()
                       .Add<PersonBizObj>();
                   x.For<IEntityBeforeUpdateEvent<Person>>()
                       .Add<EmployeeBizObj>();
//lets say I have a ManagerBizObj which inherits from EmployeeBizObj and I do not want it in the //event handler loop
         }
    }

StructureMapには、アセンブリ(dll)の初期化関数を追加するという便利な方法がありますか?

4

1 に答える 1

1

これを行うには、Registry クラスを使用します。各 dll には、所有するクラスを初期化するレジストリ クラスがあります。StrucureMap ブートストラップは、各レジストリを構成に追加します。

http://docs.structuremap.net/RegistryDSL.htm#section1

  • A.dll には FooRegistry クラスが含まれています
  • B.dll には BarRegistry クラスが含まれています

これらの各レジストリ クラスには、含まれるクラスを初期化するコードがあります。何かのようなもの:

 ForRequestedType<IRepository>().TheDefaultIsConcreteType<InMemoryRepository>();

ブートストラップ クラスには次のコードがあります。

ObjectFactory.Initialize(x =>
{
    x.AddRegistry<FooRegistry>();
    x.AddRegistry<BarRegistry>();
});
于 2013-02-20T11:17:38.083 に答える