C# 依赖注入services.为什么可以直接.对象
时间: 2023-12-24 10:03:42 浏览: 229
c# 依赖注入 控制反转
C# 中的依赖注入(Dependency Injection,简称 DI)是一种设计模式,它可以让对象之间的依赖关系由容器在运行时动态地确定和注入。在 DI 中,需要注入的依赖通常以接口的形式定义,而容器会根据配置文件或者代码中的规则,自动创建依赖的实现并注入到需要它们的对象中。
在使用 DI 时,我们通常会将需要注入的依赖以服务(Service)的形式注册到容器中,然后在需要使用这些服务的对象中通过构造函数参数或者属性来接收它们。因为服务已经在容器中注册了,所以我们可以通过容器直接获取到服务的实例,而不需要自己手动创建。
例如,假设我们有一个名为 `MyService` 的服务接口和它的实现类 `MyServiceImpl`,我们可以将 `MyServiceImpl` 注册到 DI 容器中:
```csharp
services.AddScoped<MyService, MyServiceImpl>();
```
然后在需要使用 `MyService` 的类中,我们可以通过构造函数来接收它:
```csharp
public class MyClass
{
private readonly MyService _service;
public MyClass(MyService service)
{
_service = service;
}
// ...
}
```
在这个例子中,我们通过 DI 将 `MyServiceImpl` 注入到 `MyClass` 中,而不需要直接创建 `MyServiceImpl` 的实例。在 `MyClass` 的构造函数中,我们将 `MyService` 作为参数传入,DI 容器会自动将 `MyServiceImpl` 的实例注入进去。
因为 `MyServiceImpl` 已经在 DI 容器中注册了,所以我们可以直接通过容器获取它的实例:
```csharp
var service = serviceProvider.GetService<MyService>();
```
这样就可以获取到 `MyServiceImpl` 的实例了。
阅读全文