Nat*_*ung 7 c# dependency-injection .net-core asp.net-core
我正在我的项目中实现依赖注入。我遇到过两种添加单例服务的方法 -
services.AddSingleton(new MyCustomService())
Run Code Online (Sandbox Code Playgroud)
和
services.AddSingleton<MyCustomService>()
Run Code Online (Sandbox Code Playgroud)
两种方法似乎都有效。这两种方法有什么区别,我应该使用哪一种?
当使用泛型.AddSingleton<TService>()方法(和 ).AddSingleton<TService, TImplementation>()时,类型由容器创建、控制和处置。当构造函数包含其他依赖项时,这些依赖项会自动注入(一种称为“自动装配”的技术)。
使用提供的实例.AddSingleton<TService>(TService)已经存在。在这种情况下,容器在实现或时不会处置该实例。您有责任自行处置该实例。IDisposableIAsyncDisposable
由于.AddSingleton<TService>(TService)提供了一个已经存在的实例,容器无法注入任何依赖项,因为为了做到这一点,它还必须创建该实例。
当使用该方法注册实例时.AddSingleton<TService>(Func<TService>),Func<TService>委托可以控制依赖项的创建,但委托返回的实例仍将由容器跟踪和处置。
| 归档时间: |
|
| 查看次数: |
8833 次 |
| 最近记录: |