我正在使用 NServiceBus 4.0.3、StructureMap 2.6.4.0 和 NHibernate
我已将端点配置如下:
public class EndpointConfig : IConfigureThisEndpoint,
AsA_Client, IWantCustomInitialization
{
public void Init()
{
Configure.With(
.StructureMapBuilder(getContainer());
Configure.Features.Disable<SecondLevelRetries>();
Configure.Features.Disable<Sagas>();
Configure.Features.Disable<TimeoutManager>();
}
}
private IContainer getContainer()
{
var container = new Container(x =>
{
x.Scan(s =>
{
s.WithDefaultConventions();
s.TheCallingAssembly();
});
x.ForSingletonOf<ISessionFactory>().Use(createSessionFactory());
x.For<ISession>().Use(context =>
context.GetInstance<ISessionFactory>().OpenSession());
});
return container;
}
我有一个插件系列,我想在运行时获取对象的一个实例(不能使用构造函数注入)。
在 StructureMap 世界中,可以使用以下方法完成:
ObjectFactory.GetNamedInstance<ISomething>("familyName");
但是当我使用带有结构映射的 NServiceBus 时,它会为每条消息获取一个嵌套容器。
当我想获取一个对象的实例时,上面的代码只会给我一个来自父容器的实例。由于 ObjectFactory 从未初始化,因此它没有获得实例。
如果我用我的容器初始化 ObjectFactory 的事件,因为它是一个静态包装器,所以在每条消息中使用它是不安全的。
那么如何处理给定消息的子容器,以便我可以使用插件系列?