代码之家  ›  专栏  ›  技术社区  ›  fantastischIdee

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

  •  13
  • fantastischIdee  · 技术社区  · 6 年前

    我想重建一个。NET Framework库到。NET核心,然后在中使用此库。NET Framework应用程序。

    库需要数据库连接字符串。在里面NET Core我将使用依赖注入将带有connectionstring的配置传递给library类。

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

    但是我如何从中使用这个类。NET Framework 4.6库,而不引入复杂的DI框架?

    2 回复  |  直到 6 年前
        1
  •  23
  •   Panagiotis Kanavos    5 年前

    我已经在使用新的Microsoft。中的扩展库。NET Framework 4.7.1,主要是 DependencyInjection Configuration 图书馆。

    2。x库与兼容。NET标准2.0,这意味着可以将它们添加到针对与兼容的任何运行时的应用程序中。净标准2.0,即。NET Framework 4.7.1及以上版本或。NET Core 2.0及以上版本。

    在较旧的运行时(4.6.1及更高版本)中,NuGet可能需要使用一些系统程序集(如system)的较新版本添加一些额外的包。运行时。

    您根本无法将2.0扩展包添加到4.6。您可以添加较旧的1。中使用的x版本。净核心1。x。

    正在配置 在中以相同的方式进行扩展。NET核心和完整框架:

    1. 创建ConfigurationBuilder,添加配置提供程序,最后调用Build(),以获取 IConfigurationRoot 对象:

      IConfigurationRoot configRoot = new ConfigurationBuilder()
          .AddUserSecrets<Program>()
          .AddJsonFile($"appsettings.json")
          .Build();
      
    2. 创建ServiceCollection、注册服务和调用 BuildServiceProvider() 获取 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杂志中的NET专栏,例如 Dependency Injection with .NET Core Configuration in .NET Core 。这些文章展示了如何在需要编写所有样板文件的控制台应用程序中设置和使用扩展。

    附言 ASP。NET Core 2.0也可以针对整个框架。对于一个新的web应用程序,创建一个ASP。NET Core 2.0项目目标4.7.1

        2
  •  1
  •   McGuireV10    6 年前

    您描述的场景是 .NET Standard 是为了实现。只有类库项目可以作为目标 .netstandard 任何这样的库都与最新的兼容。NET Framework应用程序以及。NET核心应用程序。

    这个Microsoft中的NET Core程序集。扩展。DependencyInjection和Microsoft。扩展。配置也包括 。网络标准 -兼容,这意味着您可以在库和应用程序中使用这些。

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