.NET Core DI 相当于 Autofac 的 WithParameter

.NET Core DI equivalent to Autofac's WithParameter

我通过以下注册在 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核心依赖注入。如何传递构造函数和参数来配置服务DI?

以下注册大致相同:

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<T>().AsSelf()。您需要添加第二个注册并将注册转发到上一个注册。这是使用 services.AddXXX<IX>(p => p.GetRequiredService<X>()).

完成的