【问题标题】:.NET Core DI equivalent to Autofac's WithParameter.NET Core DI 等效于 Autofac 的 WithParameter
【发布时间】:2021-06-03 01:58:36
【问题描述】:

我在 Autofac 中使用它并进行了以下注册:

builder.RegisterType<SBOTaskerHelper>()
    .As<ISBOTaskerHelper>()
    .AsSelf()
    .UsingConstructor(
        typeof(IPrincipal),
        typeof(IPortalSettings),
        typeof(ILogger<SBOTaskerHelper>),
        typeof(bool))
    .WithParameter("debugMode", Portal.Site.DebugMode)
    .InstancePerRequest();

转向 ASP.NET Core 依赖注入。如何传递构造函数和参数来配置服务 DI?

【问题讨论】:

  • 默认的 DI 太简单了,无法为所欲为。然而,Autofac 可以集成到 asp.net 核心中。您可以使用 asp.net core DI 中显示的相同代码。在此处查看文档autofaccn.readthedocs.io/en/latest/integration/…
  • 感谢@Nkosi 提供的文档,它帮助我理解了一些我不知道的内容。

标签: c# asp.net-core dependency-injection


【解决方案1】:

以下注册大致相同:

services.AddScoped<SBOTaskerHelper>(
    p => ActivatorUtilities.CreateInstance<SBOTaskerHelper>(
        p, Portal.Site.DebugMode));
services.AddScoped<ISBOTaskerHelper>(
    p => p.GetRequiredService<SBOTaskerHelper>());

ActivatorUtilities.CreateInstance 是 MS.DI 的辅助方法。它允许创建给定类型,其中它的依赖关系从提供的IServiceProvider 解析,同时允许重写构造函数参数。在这种情况下,我们指示 MS.DI 将 Portal.Site.DebugMode 提供给 SBOTaskerHelper 的构造函数中的第一个 bool 属性。

请注意,MS.DI 中没有 .As&lt;T&gt;().AsSelf()。您需要添加第二个注册并将注册转发到前一个注册。这是使用services.AddXXX&lt;IX&gt;(p =&gt; p.GetRequiredService&lt;X&gt;()) 完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2019-04-12
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多