从 ASP.NET Core 的容器迁移到 Autofac

2024-01-16

我正在使用 ASP.NET Core 及其内置容器。我想将我的注册迁移到 Autofac。

The Autifac 文档 http://autofac.readthedocs.io/en/latest/integration/aspnetcore.html没有“迁移指南”,所以我想确保我做的事情是正确的。

ASP.NET Core container             -> Autofac
----------------------                -------

// the 3 big ones
services.AddSingleton<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>().SingleInstance()
services.AddScoped<IFoo, Foo>()    -> builder.RegisterType<Foo>().As<IFoo>().InstancePerLifetimeScope()
services.AddTransient<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>().InstancePerDependency()

// default
services.AddTransient<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>()

// multiple
services.AddX<IFoo1, Foo>();
services.AddX<IFoo2, Foo>();       -> builder.RegisterType<Foo>().As<IFoo1>().As<IFoo2>().X()

// without interface
services.AddX<Foo>()               -> builder.RegisterType<Foo>().AsSelf().X()

还有更多的变化(例如代表,IEnumerable<>),但这些是主要的。

它是否正确?我是否在某个地方遗漏了一些细微差别,因为 Autofac 相当复杂。


UPDATE
到目前为止,评论都是“但是为什么”,但这并不重要(尽管我已经在其中一些评论中解释了我们的推理)。这是一个合理的问题。如果您对这两个容器都有使用经验,我非常感谢您的意见。

(作为这些解释的简短总结 - 根据我们多年的经验,我们经历了惨痛的教训,提供两种方法来做同一件事从来都不是一个好主意,因为它会增加 100% 的失败几率。所以选择一种方法并坚持下去。一年后,一些初级开发人员会因为对其他选择感到困惑而搞砸一些东西。)


您应该使用.AddXxx方法来自Microsoft.Extensions.DependencyInjection注册它并通过IServiceCollection到 autofac。

这使得在容器之间进行更改变得更加容易。

当然,如果您需要 Autofac/3rd party IoC 容器的某些功能(自动发现等),那么您需要使用容器本机方法。

private readonly IContainer container;
public IServiceProvider ConfigureServices(IServiceCollection services) 
{
    // your normal registrations
    services.AddSingleton<IMySingleton,MySingleton>();

    var builder = new ContainerBuilder();
    builder.Populate(services);

    // build container 
    container = builder.Build();

    // and return it
    return new AutofacServiceProvider(container);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 ASP.NET Core 的容器迁移到 Autofac 的相关文章

  • 基于 Web.Config 使用的 GAC 程序集版本

    Good Day 我有一个在 GAC 中使用自定义程序集的项目 为了能够使用它 我在中添加了对我的项目的引用 C WINDOWS Microsoft NET assembly GAC MSIL JOHN CommonLib v4 0 1 0
  • 生成Excel文件错误

    我在经典 ASP 中使用以下代码生成 Excel 文件 代码很简单并且有效 我在 Windows Vista x86 上的 IIS 7 0 下运行代码 两个问题 有一个奇怪的警告框 这是屏幕快照 http i27 tinypic com 2
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 有没有办法设置 log4net 内存附加程序可以包含的最大错误消息数?

    我想向根记录器添加一个内存附加程序 以便我可以连接到应用程序并获取最后 10 个事件 我只想保留最后 10 个 我担心这个附加程序会消耗太多内存 该应用程序设计为 24 7 运行 或者还有别的办法吗 您需要创建一个自定义附加程序来存储有限数
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • 强制 Mpeg2 解复用器使用 ffdshow 渲染 H 264 数字电视视频

    不幸的是 我花了很多时间尝试使 DirectShow 的 DTVViewer 示例正常工作 但没有成功 DVBT网络的视频格式是H264 我发现IntelliConnect行为IFilterGraph更喜欢使用 Mpeg2 视频格式 对于那
  • 确定最接近的已知颜色

    我允许我的应用程序的用户选择自定义颜色 并希望有一种方法来显示每种颜色的友好名称 而不是显示十六进制代码的文本表示形式 我如何找到最近的System Drawing Color对于给定的十六进制代码 希望这对某人有帮助 Public Fun
  • 将变量作为参数传递与传递另一个函数的返回值时出现“无效过程调用”错误

    我收到错误 无效的过程调用或参数 AddRange 当传递一个变量到ArrayList AddRange https msdn microsoft com en US library zhfwys3c 28v vs 110 29 aspx
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 使用内部 setter 进行属性注入

    我正在修改一个现有应用程序以使用 Autofac 属性注入 似乎无论我使用哪种方法向属性注册类型 属性始终为 null 除非它们具有公共设置器 对于其他 IoC 容器 例如 Structuremap 可以使用 setter 内部范围并使其可
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • ASP.NET Core 2.1 中不使用正则表达式的 URL 重写

    我的图标位于 images favicon ico而不是根 在Startup cs我可以添加重定向以避免 404 app UseRewriter new RewriteOptions AddRedirect favicon ico imag
  • 在 ASP.NET Core MVC 中访问从视图到控制器的隐藏值

    我需要帮助使用 jQuery 从 ASP NET Core razor 视图页面传递隐藏控件值 jQuery 用于获取动态控件选定的值 section scripts
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 使用 HTTParty 捕获特定请求

    我想在不使用代理的情况下捕获给定操作的完整请求 raw request 通过网络传输的内容 我知道类上的 debug output 方法 这可能是解决方案的一部分 但不清楚如何根据每个请求进行设置 考虑以下 response HTTPart
  • 黑莓中的正则表达式?

    如何在 Blackberry 中使用正则表达式验证电子邮件 Blackberry API 中没有 Pattern 类 有没有其他方法可以验证 谢谢 当前的 Blackberry API 中没有正则表达式 尝试这个 http code goo
  • 具有可变参数的回调函数 tkinter 按钮[重复]

    这个问题在这里已经有答案了 from tkinter import F Tk i 1 while i lt 10 newButton Button F text Show Number command lambda showNumber i
  • Python:Ramer-Douglas-Peucker(RDP)算法,用点数代替 epsilon

    我想修改以下 python 脚本RDP算法 https en wikipedia org wiki Ramer E2 80 93Douglas E2 80 93Peucker algorithm目的是不使用 epsilon 而是选择我想在决
  • 方案没有文件系统:cos

    我正在尝试从 IBM Data Science Experience 连接到 IBM Cloud Object Storage access key XXX secret key XXX bucket mybucket host lon i
  • 如何在 Azure 逻辑应用程序中使用 OAuth 2.0 身份验证?

    我正在尝试创建一个带有 FTP 触发器的简单逻辑应用程序 然后将任何上传的文件内容通过管道传输到我在 Azure 中托管并使用 OAuth 2 0 客户端凭据授予流进行保护的 Web API 如何在逻辑应用中配置 OAuth 2 0 身份验
  • 在 NestJS 微服务中公开正常的 http 端点

    我用 NestJs 编写了这个微服务 async function bootstrap const port parseInt process env PORT 5000 10 const app await NestFactory cre
  • 为什么一种形式的最后一个元素与第二种形式的第一个元素之间存在间隙?

    我有这个 html 文件 margin 0 padding 0 box sizing border box body margin 0 background ff5 form display inline nick msg backgrou
  • 多线程:线程多于内核有什么意义?

    我认为多核计算机的要点在于它可以同时运行多个线程 那么 如果你有一台四核机器 那么同时运行超过 4 个线程有什么意义呢 他们不会只是互相窃取时间 CPU 资源 吗 答案围绕线程的目的 即并行性 同时运行多个单独的执行行 在 理想 系统中 每
  • AngularJs 服务、文件上传、Laravel

    我在处理 XHR 请求时遇到问题 由于某种原因我的服务器未收到我的文件 这是我的角度服务更新算法 var update function id name file var formData new FormData formData app
  • Laravel 5.7 如何使用 URL 记录 404

    我想在 Laravel 5 7 中记录 404 错误 但我不明白如何打开它 除了记录 404 错误之外 我还想记录所请求的 URL 其他错误已正确记录 env APP DEBUG true LOG CHANNEL stack 配置 logg
  • 在 R 中转换 Twitter 时间戳

    我是 R 新手 不擅长处理日期 以下日期是从对 Twitter 搜索 API 的查询返回的 并作为字符串存储在我的数据框中 2011 年 1 月 14 日星期五 03 01 22 0000 如何将其转换为日期并将时区更改为东部标准时间 我认
  • Google Api 客户端 NoClassDefFoundError ApacheHttpTransport

    我在编译 Android 应用程序时遇到问题 我的应用程序使用 google api 客户端库 应用程序在构建时保持强制关闭 我已经尝试调试了3个小时 我仍然无法弄清楚 有人有办法解决这个问题吗 错误日志 java lang NoClass
  • Rails 一天 12 小时 AM/PM 范围

    这是一个非常简单的问题 以前可能已经被问过并回答过 但我找不到任何东西 不管怎样 我需要一个 12 小时的范围 数组 比如中午 12 点 上午 11 点 中午 12 点 晚上 11 点 你可能已经明白了它的要点 现在我正在尝试执行一种极其复
  • php递增时间戳错误?

    我有一个分页功能 可以翻阅时间表并每周提前日期并显示与新日期相关的详细信息 在测试一些新数据时 我遇到了分页问题 因为它不会在 2012 年 10 月 22 日通过 调试代码我最终找到了问题的根源 即将表示 22 10 2012 的日期戳增
  • 以编程方式更改 FormsAuthenticationTicket 中的用户数据

    我正在使用FormsAuthenticationTicket并放置数据并将数据传递到所有页面 如果我们不更改任何数据 它就会起作用 所以 现在如果我想更改数据并将其传递给 cookie 并加密 那么如何以编程方式更改数据 请给我更改数据的解
  • 我什么时候应该断开 GoogleApiClient (Android)

    在我的 Android 应用程序中 我有 3 个登录选项 Google Facebook 和我自己的登录选项 我已经实现了所有 3 个 我已按照上述步骤实现了 Google 登录here https developers google co
  • VueJS - 事件“click”的无效处理程序:未定义

    我有一些元素列表 单击这些元素后我想对其进行编辑 我在其他组件中有类似的解决方案 它工作得很好 但在新组件中却没有 也找不到原因 当组件渲染时我得到 Invalid handler for event click got undefined
  • Angular:服务工作者配置

    我正在尝试将 PWA 功能添加到在 Angular 8 上运行的网站 我遵循了很多官方和非官方的教程 但我不明白我做错了什么 ngsw config json 是这样的 schema node modules angular service
  • 从 ASP.NET Core 的容器迁移到 Autofac

    我正在使用 ASP NET Core 及其内置容器 我想将我的注册迁移到 Autofac The Autifac 文档 http autofac readthedocs io en latest integration aspnetcore