详细解释 构造方法注入、setter方法注入和接口方式注入 C#
时间: 2024-09-14 21:05:00 浏览: 54
在C#中,依赖注入是一种设计模式,用于将应用程序的对象从外部源头获取依赖,而不是内部创建。这里有三种常见的依赖注入方式:
1. 构造方法注入(Constructor Injection): 这是最直接的方式,通过在类的构造函数中接收依赖对象作为参数。当创建对象实例时,框架会自动传入所需的依赖。例如:
```csharp
public class UserService { public UserService(IUserRepository userRepository) { _userRepository = userRepository; } // ... }
```
在这个例子中,`UserService`需要`IUserRepository`服务,框架会在构造时提供。
2. Setter方法注入 (Property Injection): 当类有公共属性用于存储依赖时,可以使用setter方法进行注入。通常在初始化完成后通过设置属性来完成。示例:
```csharp
public class UserService {
private IUserRepository userRepository;
public void SetUserRepository(IUserRepository userRepository) {
this.userRepository = userRepository;
}
}
```
然后在使用时调用`SetUserRepository()`方法注入。
3. 接口注入 (Interface Injection or Constructor over Interface): 类通过接口而非具体的实现来接受依赖。这样可以增加灵活性,因为可以改变依赖的具体实现而无需修改使用它的类。如:
```csharp
public interface IUnitOfWork { void Commit(); }
public class UserService : IUseService, IUnitOfWorkAware {
private IUnitOfWork unitOfWork;
public void SetUnitOfWork(IUnitOfWork unitOfWork) {
this.unitOfWork = unitOfWork;
}
// ...
}
```
在这里,`UserService`通过`IUnitOfWorkAware`接口获取`IUnitOfWork`,允许更换不同实现。
阅读全文