Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 库.NET核心中的依赖项注入调用_C#_.net Core_Dependency Injection - Fatal编程技术网

C# 库.NET核心中的依赖项注入调用

C# 库.NET核心中的依赖项注入调用,c#,.net-core,dependency-injection,C#,.net Core,Dependency Injection,库调用通过依赖项注入注入的对象的正确方法是什么 背景:我有多个.NET核心应用程序,对所有主要对象使用依赖注入,并使用库实现可重用性。它工作得很好。App1调用Libary1和Libary2。App2调用Libary2和Libary3等 service.AddTransient<Libary1.ILibary1Dependency, Libary1.Libary1Dependency>(); service.AddTransient<Libary2.ILibary1Depend

库调用通过依赖项注入注入的对象的正确方法是什么

背景:我有多个.NET核心应用程序,对所有主要对象使用依赖注入,并使用库实现可重用性。它工作得很好。App1调用Libary1和Libary2。App2调用Libary2和Libary3等

service.AddTransient<Libary1.ILibary1Dependency, Libary1.Libary1Dependency>();
service.AddTransient<Libary2.ILibary1Dependency, Libary2.Libary1Dependency>();
service.AddTransient<Libary2.ILibary2Dependency, Libary2.Libary2Dependency>();
service.AddTransient<Libary3.ILibary1Dependency, Libary3.Libary1Dependency>();
service.AddTransient();
service.AddTransient();
service.AddTransient();
service.AddTransient();
现在在
Libary2.ILibary1Dependency
中,有一个方法需要调用新的
Libary2.ILibary2Dependency
。最好的方法是什么

我应该只做一个
newlibary2.ilibary2依赖项(property1,property2…)

在主应用程序中实际注入
IServiceCollection
对象,然后在
Libary2.ilibary1依赖项的构造函数中获取
IServiceCollection
是否可以

是否有一些我不知道的金块包可以完美地解决这个问题


注意:
Libary2.ILibary2Dependency
确实会通过依赖项注入自己被调用,如果您想知道

,请按照注释中的建议,保持库独立于服务依赖项注入。让调用方根据需要决定注入它们,这有助于保持库独立于IOC框架

如果您需要更改IOC框架,甚至需要升级到最新版本,那么您可能需要花时间跨库进行更新,这些依赖项越多,最终需要的房屋清理就越多

我见过有人创建通用包装来避免对IOC框架的特定依赖,但这有点过分了


如果你只有3个或4个项目,在两个方向上重构它们并不重要

如评论中所建议的,保持库独立于服务依赖注入。让调用方根据需要决定注入它们,这有助于保持库独立于IOC框架

如果您需要更改IOC框架,甚至需要升级到最新版本,那么您可能需要花时间跨库进行更新,这些依赖项越多,最终需要的房屋清理就越多

我见过有人创建通用包装来避免对IOC框架的特定依赖,但这有点过分了

如果你只有3个或4个项目,在两个方向上重构它们并不重要

正确的做法是(可以说)不假设调用方使用任何类型的依赖注入框架,以免将它们绑定到特定的框架。如果需要
ILibrary2Dependency
对象,则在调用站点注入它:要么是对象的构造函数,要么是被调用的方法,要么(如果类确实需要独立构造实例)注入
Func
。虽然您可以传递IServiceCollection,但通过这样做,您重新引入了DI想要解决的问题:依赖项应该是显式的。正确的做法是(可以说)不假设调用方使用任何类型的依赖项注入框架,以免将它们绑定到特定的框架。如果需要
ILibrary2Dependency
对象,则在调用站点注入它:要么是对象的构造函数,要么是被调用的方法,要么(如果类确实需要独立构造实例)注入
Func
。虽然您可以传递IServiceCollection,但通过这样做,您重新引入了DI想要解决的问题:依赖关系应该是明确的。