2013-02-18 164 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