我已经在使用 .NET Framework 4.7.1 中的新 Microsoft.Extensions 库,主要是 DependencyInjection 和 Configuration 库。
2.x 库与 .NET Standard 2.0 兼容,这意味着它们可以添加到面向与 .NET Standard 2.0 兼容的任何运行时的应用程序中,即 .NET Framework 4.7.1 及更高版本或 .NET Core 2.0及以上。
在较旧的运行时(4.6.1 和更高版本)中,NuGet 可能需要添加一些额外的包以及某些系统程序集的较新版本,例如 System.Runtime。
您根本无法将 2.0 扩展包添加到 4.6。您可以添加在 .NET Core 1.x 中使用的较旧的 1.x 版本。
配置扩展在 .NET Core 和 Full Framework 中以相同的方式完成:
-
你创建一个ConfigurationBuilder,添加配置提供者,最后调用Build()得到一个IConfigurationRoot对象:
IConfigurationRoot configRoot = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.AddJsonFile($"appsettings.json")
.Build();
创建一个 ServiceCollection,注册服务并调用 BuildServiceProvider() 以获取 ServiceProvider。您将使用该 ServiceProvider 创建需要注入的类的实例。
同样适用于完整框架的 ASP.NET Core 提供了隐藏样板代码的额外帮助程序库。
IServiceCollection services = new ServiceCollection();
ServiceProvider provider= services.AddSingleton<MyService>()
.AddTransient<AnotherService>()
.AddTransient<ServiceThatNeedsTheOthers>()
.BuildServiceProvider();
假设第三个服务是:
public class ServiceThatNeedsTheOthers
{
public ServiceThatNeedsTheOthers(MyService s1,AnotherService s2){..}
}
您可以使用:
var service3=provider.GetRequiredService<ServiceThatNeedsTheOthers>();
所有这些都在 MSDN 杂志的 Mark Michaelis 的 Essential .NET 专栏中进行了描述,例如 Dependency Injection with .NET Core 和 Configuration in .NET Core。这些文章展示了如何在需要编写所有样板的控制台应用程序中设置和使用扩展。
PS ASP.NET Core 2.0 也可以针对完整框架。对于新的 Web 应用程序,创建一个面向 4.7.1 的 ASP.NET Core 2.0 项目可能很有意义