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입니다. 내가 잘못 배선 했나요?
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 } –
내가 Autofac로 변경뿐만 아니라 그 공장을 등록하지만, 공장 사가 여전히 널 ... –
는 참고 : 나는 NSB 3.0.3 ... –