ServiceStack (http://www.servicestack.net) を使って休憩サービスを作っています。データ アクセス レイヤーに作業単位パターンを使用しています。StructureMap を使用して、すべてのサービスと作業単位を一緒に接続しています。
私がしなければならないことは、受け取った個々の要求ごとに 1 つの作業単位を作成し、後でそれを破棄することです。
ここのメカニズムを使用している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();
}
}