2012-04-15 1 views
0

NSB를 구성 할 때 ninject를 사용하고 있습니다. 다음은 내가 등록하는 방법입니다.nservicebus nagject를 통한 사가 속성 주입

public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization 
{ 
    #region Implementation of IWantCustomInitialization 

    public void Init() 
    { 
     var kernel = new StandardKernel(); 

     Configure.With().NinjectBuilder(kernel); 

     kernel.Load(new BackendModule()); 
    } 

    #endregion 
} 
public class BackendModule : NinjectModule 
{ 
    #region Overrides of NinjectModule 

    /// <summary> 
    /// Loads the module into the kernel. 
    /// </summary> 
    public override void Load() 
    { 
     Bind<IEventBus>().To<NsbBus>(); 
     Bind<IRecordStorageConfig>().To<RegistrationEventStorageConfig>(); 
     Bind<IRecordStorage>().To<RegistrationRecordStorage>(); 
     Bind<IRecordStorageFactory>().To<RegistrationRecordStorageFactory>(); 
     Bind<IAggregateRootFactory>().To<RegistrationFactory>(); 
    } 

    #endregion 
} 

나는 사가에서 IAggregateRootFactory가 필요합니다.

public class RegistrationSaga : Saga<RegistrationSagaData>, 
           IAmStartedByMessages<StartRegistration>, 
           IHandleMessages<CreateRegistration>, 
           IHandleMessages<ValidateRegistration>, 
           IHandleMessages<CancelRegistration> 
{ 
    public RegistrationFactory Factory { get; set; } 

    // removed implementation 
} 

사가가 성공적으로 시작되고 명령이 처리기가 호출됩니다. 그러나 IAggregateRootFactory 속성 주입이 작동하지 않습니다. 팩토리는 항상 null입니다. 내가 잘못 배선 했나요?

+0

NsbBus는 래퍼이며 다음과 같습니다. public class NsbBus : IEventBus { private readonly IBus m_nsb; public NsbBus (IBus nsb) { m_nsb = nsb; } IEventBus 의 # 지역 구현 공개 무효 게시 (T의 @event) 여기서 T : 클래스 IEvent { m_nsb.Publish (@event); } 공공 무효 PublishAll (IEnumerable을 이벤트) 여기서 T : 클래스, IEvent { foreach는 (이벤트에 var에 @event) m_nsb.Publish (@event); } #endregion } –

+0

내가 Autofac로 변경뿐만 아니라 그 공장을 등록하지만, 공장 사가 여전히 널 ... –

+0

는 참고 : 나는 NSB 3.0.3 ... –

답변

1

왜 당신의 무용담에 RegistrationFactory/IAggregateRootFactory가 있어야하는지 잘 모르겠지만 아마 좋은 생각이 아닙니다.

+0

을 사용하고하는 것은 공장 명령을 전달하는 AR에. 무용담의 핸들러는 Factory.ExecuteStoreDispatch (someCommand)와 같은 기능을 수행합니다. 코드는 여기에 있습니다. http://paste2.org/p/1986273 –

+0

무언가로 논리를 옮기려고하는 것 같습니다 (집계 루트라고 부르는 것). 그렇게 할 때 가치가 있는지 확신 할 수 없습니다. –

+0

로직이 AR에 유지됩니다. 사가 (Saga)는 단지 그 명령의 결과로부터 이벤트를 적용하여 상태를 변경시키는 AR에 명령을 전달합니다. 사가는 깨끗하게 유지됩니다. 이것이 사가의 올바른 사용법이 아니라면 나를 바로 잡으십시오. –