服务堆栈 - 工作单元和结构图



我正在使用ServiceStack(http://www.servicestack.net)制作休息服务。我正在为数据访问层使用工作单元模式。我正在使用StructureMap将所有服务和工作单元连接在一起。

我需要做的是为我收到的每个请求创建一个工作单元,然后在之后处理它。

http://andreasohlund.net/2009/04/27/unitofwork-in-wcf-using-structuremap,我有一个 WCF 服务,它正在使用这里的机制。

本质上导致这样的事情

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();
    }
}

听起来你只是想要请求范围?

另请查看具体的 Service 基类,了解如何使用延迟加载 + Dispose() 来获取此行为。

以及在ServiceStack的新API中,您可以使用自己的ServiceRunner覆盖服务OnBeforeExecute() OnAfterExecute()事件钩子(在较旧的API中,您需要提供自定义服务基类)。

最新更新