我正在使用 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;
}
我有一个pluginfamily,我想在运行时获取对象的实例(不能使用构造函数注入)。
在StructureMap世界中,可以使用:
来完成 ObjectFactory.GetNamedInstance<ISomething>("familyName");
但是当我使用NServiceBus和structuremap时,它会为每条消息获取一个嵌套容器。
当我想获取一个对象的实例时,上面的代码只会给我一个来自父容器的实例。由于ObjectFactory从未初始化,因此它不会获得实例。
如果我用我的容器初始化ObjectFactory,因为它是一个静态包装器,每个消息使用它是不安全的。
那么如何处理给定消息的子容器以便我可以使用插件系列?
答案 0 :(得分:1)
您无法通过NServiceBus IBuilder api(https://github.com/Particular/NServiceBus/issues/1565)
访问该孩子但我很确定你可以通过将StructureMap提供的原生IContainer接口注入你的处理程序来实现它。
简而言之:
依赖StructureMap.IContainer