我使用 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