我正在使用ServiceStack(http://www.servicestack.net)進行休息服務。我爲我的數據訪問層使用工作單元模式。我正在使用StructureMap將我所有的服務和工作單元連接起來。ServiceStack - 工作單元和結構圖
我需要做的是爲我收到的每個單獨的請求創建一個工作單元,然後處理它。
我有一個WCF服務,它使用這裏的機制,http://andreasohlund.net/2009/04/27/unitofwork-in-wcf-using-structuremap。
本質導致這樣的事情
ObjectFactory.Initialize(x =>
{
x.Scan(a =>
{
a.AssemblyContainingType<IUnitOfWork>();
a.WithDefaultConventions();
});
x.For<IUnitOfWork>().LifeCycleIs(new WcfOperationLifecycle());
}
我找了ServiceStack類似的「生命週期」。
[解決]
的解決方案是在接受的答案的意見。
a)將StructureMap生命週期的HttpContext
x.For<IUnitOfWork>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.HttpContext));
二)更新了結構圖IOC適配器來擴展IRelease接口
class StructureMapContainerAdapter : IContainerAdapter, IRelease
{
public T Resolve<T>()
{
return ObjectFactory.GetInstance<T>();
}
public T TryResolve<T>()
{
return ObjectFactory.TryGetInstance<T>();
}
public void Release(object instance)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
}
要使用請求範圍,我必須切換到使用inbuit'Funq',而不是使用結構圖,雖然正確嗎? – John
內置的RequestScope在Funq上,否則只需在'ContainerAdapter'的首選IOC上使用Request Scope。查看維基的底部,瞭解如何將資源釋放回您的IOC中,例如讓你的ContainerAdapter也執行'IRelease' – mythz
我有一些麻煩讓'ServiceRunner'工作。我最終發現,如果你的服務擴展了'RestServiceBase'類,它就不起作用,它只在擴展'Service'類時才起作用。這似乎沒有在任何地方的文檔中提及。 – John