DLL初始化方法

时间:2013-02-18 17:08:53

标签: structuremap

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

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

我不想扫描EventHandlers,因为一次又一次地在继承的类中注册和执行相同的处理程序,但我希望在structmap bootsrapper中调用每个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)明智的初始化函数?

1 个答案:

答案 0 :(得分:1)

我使用Registry类来执行此操作。每个dll都有一个注册表类,用于初始化它拥有的类。 StrucureMap引导程序将每个注册表添加到配置中。

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

  • A.dll包含一个FooRegistry类
  • B.dll包含BarRegistry类

这些注册表类中的每一个都具有初始化其包含的类的代码。类似的东西:

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

bootstrapper类具有以下代码:

ObjectFactory.Initialize(x =>
{
    x.AddRegistry<FooRegistry>();
    x.AddRegistry<BarRegistry>();
});