And*_*röm 5 dependency-injection asp.net-core
我正在将一个项目从 .NET 4.52 移植到 .NET Core。该项目之前使用 Structuremap 进行依赖注入,并且在 Structuremap 中您不需要配置具体类型来启用依赖注入。有没有办法通过 .NET Core 中的内置依赖注入来做到这一点?
如果您尝试解析具体类型并从 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)