我使用 NServiceBus 4.0.3, StructureMap 2.6.4.0和 NHibernate的如何获取消息处理程序内的NServiceBus子容器的句柄?
我已经配置我的终点如下:
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,因为它是一个静态包装器,它不会安全地使用它的每个消息。
那么,我该如何处理我的子容器中给定的消息,以便我可以使用插件系列?
依赖这可能不回答你的问题,但你能不能换也许在一些其他对象的检索,如'ISomethingProvider'的实现?该实现可以访问您需要的结构映射的基本实例,并且它包装服务定位器位。在消息处理程序中,您可以使用构造函数注入来获取提供程序。我不知道结构图,并没有使用其他工具的子容器,所以我希望我不会说太多的废话:) –
我需要在运行时确定实例,所以我确实需要定位器服务,但该确定定位器服务是我想让它留给Structuremap插件家族的东西。 – user1414095