NET核心依赖注入向后兼容.NET Framework?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (263)

我希望将.NET Framework库重新构建为.NET Core,然后在.NET Framework应用程序中使用此库。

库需要一个数据库连接字符串。在.NET Core中,我将使用依赖注入将带有连接字符串的配置传递给库类。

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

但是,在不引入复杂的DI框架的情况下,如何使用.NET Framework4.6库中的这个类呢?

提问于
用户回答回答于

你根本不能将2.0扩展包添加到4.6中。你可以添加.NET Core 1.x中使用的旧版本1.x。

配置在.NET核心和完整框架中,扩展是以同样的方式完成的:

  1. 创建ConfigurationBuilder,添加配置提供程序,最后调用build()以获得IConfigurationRoot对象:IConfigurationRootconfigroot=新的ConfigurationBuilder().AddUserSecrets<Program>().addJsonFile($“appsetings.json”).build();
  2. 创建ServiceCollection,注册服务和调用BuildServiceProvider()得到一个ServiceProvider。您将使用ServiceProvider创建需要注入的类的实例。

ASP.NETCore也适用于整个框架,它提供了额外的帮助程序库来隐藏样板代码。

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>();
用户回答回答于

你可以在.NET Framework中使用.NET Core DI,在库场景中,只需坚持.NET标准API,它也将适用于所有.NET实现。我有一些很大很复杂的.netstandard20库,这些库与针对这两个框架的应用程序一起使用,而且我很少需要问自己给定的api是否兼容,因为现在的覆盖率非常好。

扫码关注云+社区

领取腾讯云代金券