2013-02-18 118 views
1

我需要的是在每个dll中注册某些事件类型的具体类。dll初始化方法

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

我不想扫描的事件处理,由于得到同样的处理程序注册,并在一次又一次的继承类执行,但我想在每个DLL的初始化方法在structuremap bootsrapper被调用。

所以在每个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

我使用注册表类来做到这一点。每个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>(); 
}); 
+0

我不知道,是继承“注册表”足以使它被执行? – hazimdikenli 2013-02-20 20:52:31

+0

引导程序仍然需要添加每个注册表。请参阅http://docs.structuremap.net/RegistryDSL.htm#section2。 – 2013-02-20 21:13:11