簡體   English   中英

.NET Core依賴注入向后兼容.NET Framework?

[英].NET Core dependency injection backwards compatibility with .NET Framework?

我想將.NET Framework庫重建為.NET Core,然后在.NET Framework應用程序中使用此庫。

該庫需要一個數據庫連接字符串。 在.NET Core中,我將使用依賴注入將帶有連接字符串的配置傳遞給庫類。

public MyRepository(IConfiguration config)
{
    _connectionString = config.GetConnectionString("MyDb");
}

但是,如何在不引入復雜DI框架的情況下使用.NET Framework 4.6庫中的此類?

我已經在.NET Framework 4.7.1中使用新的Microsoft.Extensions庫,主要是DependencyInjectionConfiguration庫。

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中以相同的方式配置擴展:

  1. 您創建一個ConfigurationBuilder,添加配置提供程序並最后調用Build()以獲取IConfigurationRoot對象:

     IConfigurationRoot configRoot = new ConfigurationBuilder() .AddUserSecrets<Program>() .AddJsonFile($"appsettings.json") .Build(); 
  2. 創建一個ServiceCollection,注冊服務並調用BuildServiceProvider()以獲取ServiceProvider 您將使用該ServiceProvider創建需要注入的類的實例。

ASP.NET Core也適用於Full框架,它提供了隱藏樣板代碼的額外幫助程序庫。

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專欄中進行了描述,例如.NET Core中的依賴注入和.NET Core中的 配置 這些文章展示了如何在控制台應用程序中設置和使用擴展,您需要編寫所有樣板文件。

PS ASP.NET Core 2.0也可以針對Full框架。 對於新的Web應用程序,創建面向4.7.1的ASP.NET Core 2.0項目可能是有意義的

您描述的場景是.NET Standard要實現的目標。 只有類庫項目可以以.netstandard目標,並且任何此類庫都與最新的.NET Framework應用程序以及.NET Core應用程序兼容。

Microsoft.Extensions.DependencyInjection和Microsoft.Extensions.Configuration中的.NET Core程序集也是.netstandard -compatible,這意味着您可以在庫和應用程序中使用它們。

所以,是的,您可以將.NET Core DI與.NET Framework一起使用,並且在庫場景中只需堅持使用.NET標准API,它也適用於所有.NET實現。 我有一些非常大的,非常復雜的.netstandard20庫,我使用它們同時針對兩個框架的應用程序,我很少需要問自己一個給定的API是否兼容,因為現在覆蓋范圍很好,但你可以在這里找到完整的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM