C# 如何创建一个在内部使用DI并在不使用';你不使用DI吗?

C# 如何创建一个在内部使用DI并在不使用';你不使用DI吗?,c#,configuration,service-locator,dependency-inversion,C#,Configuration,Service Locator,Dependency Inversion,嗨,伙计们 我需要在项目中创建一个库,该库在内部使用DI,如下所示: 库 namespace Library { public class SomeService : ISomeService { private readonly IOtherService _otherService; public SomeService(IOtherService otherService, ICon

嗨,伙计们

我需要在项目中创建一个库,该库在内部使用DI,如下所示:

namespace Library
{
    public class SomeService : ISomeService
    {
        private readonly IOtherService _otherService;

        public SomeService(IOtherService otherService,
                             IConfiguration configuration) { /* constructor stuff */ }

       //... class stuff

    }
}
但它将作为一个nuget包,在另一个不直接使用DI的项目中使用

解决此库的依赖关系并在客户端项目上实例化de服务的最佳方法是什么

我正在考虑使用ServiceLocator模式创建一个入口点,并将其提供给客户机,这是完成此工作的唯一方法(还是最佳方法)

有没有其他方法可以建立这样的库


编辑:我在内部使用DI框架来连接库中的类。客户端项目有一个注册依赖项的启动,但类不准备在构造函数中接收实例。

使用依赖项注入和使用依赖项注入框架是有区别的。将
IOtherService
IConfiguration
注入到库类中并没有问题,也不会给用户带来负担,只是他们必须处理
Microsoft.Extensions.Configuration
(假设这就是
IConfiguration
的来源)。他们可以自由使用Microsoft的框架或其他东西,也可以完全不使用,直接自己调用构造函数。您可以尝试ILMerge或SmartAssembly或任何其他工具将两个DLL合并为一个。@KrivitskiyGrigory这不是问题所在。您可以在不使用DI框架的情况下使用配置类。这些接口在一个单独的包中,
Microsoft.Extensions.Configuration.Abstractions
。不要破坏库并引入像ServiceLocator这样的反模式,而是在客户机中使用抽象并将其传递给库。您很快就会发现,像这样使用配置实际上更容易。此外,配置就是配置。不是依赖注入。这些抽象是众所周知的.NET核心/标准范围的配置抽象。通过使用它们,库不需要硬编码访问某些设置文件。客户端提供配置值