在 .NET Core 中无需配置即可自动解析具体类?

And*_*röm 5 dependency-injection asp.net-core

我正在将一个项目从 .NET 4.52 移植到 .NET Core。该项目之前使用 Structuremap 进行依赖注入,并且在 Structuremap 中您不需要配置具体类型来启用依赖注入。有没有办法通过 .NET Core 中的内置依赖注入来做到这一点?

Mat*_*t M 2

如果您尝试解析具体类型并从 IoC 容器注入其依赖项,那么以下扩展函数可能对您有用。这假设具体类型的所有依赖关系都可以通过容器来解决。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

namespace Microsoft.Extensions.DependencyInjection
{
    public static class ServiceProviderExtensions
    {
        public static TService AsSelf<TService>(this IServiceProvider serviceProvider, params object[] overrides)
        {
            return (TService)AsSelf(serviceProvider, typeof(TService), overrides);
        }
        public static object AsSelf(this IServiceProvider serviceProvider, Type serviceType, params object[] overrides)
        {
            // ref: https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.activatorutilities.createinstance?view=dotnet-plat-ext-5.0#definition
            // ref: https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ActivatorUtilities.cs#L108-L118

            return ActivatorUtilities.CreateInstance(serviceProvider, serviceType, overrides);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)