2013-02-18 5 views
1

필요한 것은 각 DLL의 특정 이벤트 유형에 대한 구체적인 클래스를 등록하는 것입니다.dll 초기화 도구 메서드

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

내가 인해 동일한 핸들러를 등록하고 다시하고 다시 상속 클래스에서 실행하기 때문에, EventHandlers를 검색하고 싶지 않아,하지만 각 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는
  • B.DLL 이러한 레지스트리 클래스의 각 포함 된 클래스를 초기화 코드가있는 BarRegistry 클래스

을 포함하는 FooRegistry 클래스를 포함합니다. 같은 뭔가 :

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

나는 확실하지 않다, 그것을 실행하기에 충분한 내용은 "레지스트리"서브 클래스된다

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

부트 스트 래퍼 클래스는 다음과 같은 코드가? – hazimdikenli

+0

부트 스트 래퍼는 각 레지스트리를 추가해야합니다. http://docs.structuremap.net/RegistryDSL.htm#section2를 참조하십시오. –