2

我正在使用 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();
    }
}
4

1 回答 1

1

听起来你只想要Request Scope吗?

还可以查看具体的Service基类,了解如何使用延迟加载 +Dispose()来获得这种行为。

除了在ServiceStack 的新 APIOnBeforeExecute() OnAfterExecute()中,您还可以使用自己的ServiceRunner覆盖您的服务事件挂钩(在旧 API 中,您需要提供自定义服务基类)。

于 2012-09-28T14:32:48.990 回答