c# - 如何使用 Unity.WebApi 通过接口实例访问类属性
问题描述
是否可以通过 IOC 公开不同类中的类公共属性。我正在创建一个接口实例,但我无法访问类的公共属性。我正在使用 Unity.WebApi 来解决依赖关系。
事务服务类
public class TransactionService : ITransactionService
{
private readonly IMRepository _mRepository;
private readonly IFService _fGateway;
public TransactionService(IMbaRepository mbaRepository, IFpnService fpnService)
{
_mRepository = mRepository;
_fGateway = fService;
}
private List<Transaction> SearchTransacionsByUser(FUser objFUser)
{
foreach (var item in something)
{
//can't use _fGateway to set properties because Interface
// don't implement them
_fGateway.OID = objFUser.OID.ToString();
_fGateway.Amount = objFUser.Amount;
_fGateway.Search(criteria);
}
}
}
FService类
public class FService : IFpService
{
public string _OID { get; set; }
public decimal _Amount{ get; set; }
public TransactionResponse Search(string criteria)
{
TransactionOperationInput _input;
_input = new TransactionOperationInput()
{
Criteria = _criteria,
OID = _OID,
Amount = _Amount
};
// search transactions
}
}
解决方案
如果您可以控制服务,则重构接口以公开所需的成员
public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}
确保派生实现具有这些成员
public class FService : IFpService {
public TransactionResponse Search(TransactionOperationInput input) {
// search transactions
}
}
并且依赖类使用正确的抽象
public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;
public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}
private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {
TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};
fGateway.Search(input);
//...
}
//...
}
}
最后确保使用 IoC/DI 容器注册适当的抽象和实现。
推荐阅读
- java - 流 peek() 方法行为
- deep-learning - 火炬。在 Dataloader 中 pin_memory 是如何工作的?
- php - Wordpress:分类列表上的分类计数器(插件)
- vb.net - Crystal Report 选择公式无法使用变量
- javascript - 在 electron 中使用 NODE_PATH 将 src/ 中的文件夹映射为模块
- javascript - 重复的 Vue 组件实例
- deep-learning - 使用带有暗网的 dlib 检测具有关键点的对象
- javascript - 收到“InvalidValueError: setCenter: not a LatLng or LatLngLiteral: in property lng: not a number”错误,即使值是数字
- python - 如何让异步函数在后台运行?
- python - 如何解决 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte in python