EF code first
のチュートリアルで以下のようなコードを見て、パターンMVC
をStructureMap
作成しました。Context Per Request
protected void Application_Start()
{
...
initStructureMap();
}
private static void initStructureMap()
{
ObjectFactory.Initialize(x =>
{
x.For<IUnitOfWork>().HttpContextScoped().Use(() => new Context());
x.For<IFirstEntity>().Use<FirstEntity>();
x.For<ISecondEntity>().Use<SecondEntity>();
x.For<IThirdEntity>().Use<ThirdEntity>();
});
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
protected void Application_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
FirstEntity
、SecondEntity
および...すべてIunitOfWork
のコンストラクターが必要です。
ご覧のとおり、他のユーザーには使用HttpContextScoped()
せContext
ず、EndRequest
呼び出した場合に使用しますReleaseAndDisposeAllHttpScopedObjects()
。
1-これは正しいアプローチですか?
2- HttpContextScoped()を他のすべてに使用しますか、それともService layer Interfaces
単に使用しIUnitOfWork
ますか?例えば
x.For<IFirstEntity>().Use<FirstEntity>();
また
x.For<IFirstEntity>().HttpContextScoped().Use(() => new FirstEntity());
3-ReleaseAndDisposeAllHttpScopedObjects()
すべてのインスタンスを破棄しますか、それとも単に破棄しContext
ますか?