1

我需要的是在每个 dll 中为某些事件类型注册具体的类。

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

我不想扫描事件处理程序,因为在继承的类中一次又一次地注册和执行相同的处理程序,但我希望在结构映射引导程序中调用每个 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 都有一个注册表类,用于初始化它拥有的类。StructureMap 引导程序将每个注册表添加到配置中。

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 回答