我正在使用 ServiceStack (http://www.servicestack.net) 提供休息服务。我正在为我的数据访问层使用工作单元模式。我正在使用 StructureMap 将我的所有服务和工作单元连接在一起。
我需要做的是为我收到的每个单独的请求创建一个工作单元,然后将其处理掉。
我有一个使用该机制的 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));
b) 更新了结构映射 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();
}
}