gpt4 book ai didi

asp.net - 在同一项目的 MVC 和 Web API 中使用 InstancePerHttpRequest 而不是 InstancePerApiRequest 有什么缺点?

转载 作者:行者123 更新时间:2023-12-02 15:15:18 26 4
gpt4 key购买 nike

我的应用程序与 VS 2013 的 Web API 默认模板完全相同。基本上,Web API 2 用于 API,MVC 5 用于文档。

我正在使用Autofac,到目前为止它运行良好。以下是我所拥有的精简版 -

var builder = new ContainerBuilder();

var assemblies = Assembly.GetExecutingAssembly();
builder.RegisterControllers(assemblies);
builder.RegisterApiControllers(assemblies);

builder.RegisterType<MyService>().As<IMyService>()
.InstancePerHttpRequest();

var apiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = apiResolver;

var mvcResolver = new AutofacDependencyResolver(container);
DependencyResolver.SetResolver(mvcResolver);

到目前为止,InstancePerHttpRequest 适用于 MVC 和 Web API。

问题

我想知道使用 InstancePerHttpRequest 而不是 InstancePerApiRequest 的缺点,这样如果将来遇到问题我就不会感到惊讶。

我发现类似的question ,但它没有回答我的问题。

注意:我在 SO 中找到了一些答案,说我们不应该在同一个项目中混合使用 MVC 和 Web API。对我来说,我只需要几个 MVC 网页作为文档,所以我不想创建新的 MVC 项目。

提前致谢!

最佳答案

现在,InstancePerApiRequestInstancePerHttpRequest 方法执行完全相同的操作 - 使用公共(public)生命周期范围“名称”注册 InstancePerLifetimeScope。它实际上是InstancePerMatchingLifetimeScope("AutofacWebRequest")

请求范围在 Web 表单、WebAPI 和 MVC 集成中被命名为相同的东西,因此它们都是可以互换的。这是故意的。但是,由于挑战在于您可以混合和匹配所有这些技术,或者仅使用其中一种技术,因此我们必须为每种技术提供“相同的东西”。论坛上有人讨论创建某种中央/基础“Web 集成”库,该库在所有 ASP.NET 内容中都很常见,以消除困惑,但这将是一个重大更改,因此暂时不会发生.

目前,您可以安全地交替使用这两个扩展。

请注意,其他扩展(例如InstancePerApiControllerType)执行不同的操作,因此只有“请求生命周期范围注册扩展”可以互换。

关于asp.net - 在同一项目的 MVC 和 Web API 中使用 InstancePerHttpRequest 而不是 InstancePerApiRequest 有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442309/

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