【发布时间】:2012-04-20 04:09:58
【问题描述】:
我在配置 NSB 时使用了 ninject。以下是我的注册方式:
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
}
saga 成功启动,命令是处理程序被调用。但是 IAggregateRootFactory 属性注入不起作用。工厂始终为空。我是不是接线错了?
【问题讨论】:
-
NsbBus 只是一个包装器,看起来像这样: public class NsbBus : IEventBus { private readonly IBus m_nsb;公共 NsbBus(IBus nsb) { m_nsb = nsb; } #region IEventBus 的实现 public void Publish
(T @event) where T : class, IEvent { m_nsb.Publish(@event); } public void PublishAll (IEnumerable events) where T : class, IEvent { foreach (var @event in events) m_nsb.Publish(@event); } #endregion } -
我改用 Autofac 并注册了那个工厂,但是工厂在传奇中仍然是空的......
标签: ninject nservicebus cqrs