gpt4 book ai didi

asp.net-mvc-3 - StructureMap HttpContextScoped 是必要的吗?

转载 作者:行者123 更新时间:2023-12-03 18:28:16 27 4
gpt4 key购买 nike

我在 EF code first 的教程中看到了如下代码, MVCStructureMap创建 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- 我应该对所有其他 Service layer Interfaces 使用 HttpContextScoped()或者不只是为了 IUnitOfWork ?例如
x.For<IFirstEntity>().Use<FirstEntity>();

或者
x.For<IFirstEntity>().HttpContextScoped().Use(() => new FirstEntity());

3- ReleaseAndDisposeAllHttpScopedObjects()处置所有实例或仅处置 Context ?

最佳答案

Web 应用程序的约定是在整个 http 请求期间保持相同的 ORM 上下文/UnitOfWork。这是为了在请求期间使用相同的实体,保持数据一致并最小化进行的数据库调用。 HttpContextScoped生命周期确保在请求所有依赖于它的实例期间使用相同的 UoW 实例。

所以1)是的,这是正确的

至于剩下的“服务层接口(interface)”,就看在整个请求过程中是否需要是同一个实例。问问自己:“在整个请求期间是否需要此对象的状态”?对于大多数“服务”而言,情况并非如此。另请注意,制作“HttpContextScoped”也会使其所有依赖项保持在该范围内。

这导致我说 2) 在大多数情况下,不
ReleaseAndDisposeAllHttpScopedObjects处理用 HttpContextScoped 注册的容器中的所有对象.默认情况下,对象在 Structuremap 中被限定为 transient (每次调用的新实例)。

所以 3) 只是 IUnitOfWork实例将被处置。

关于asp.net-mvc-3 - StructureMap HttpContextScoped 是必要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com