是否可以通过 IOC 公开不同类中的类公共(public)属性。我正在创建一个接口(interface)实例,但我无法访问类的公共(public)属性。我正在使用 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);
}
}
}
F服务类
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
}
}
最佳答案
如果您控制服务,则重构接口(interface)以公开所需的成员
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 容器注册适当的抽象和实现。
关于c# - 如何使用 Unity.WebApi 通过接口(interface)实例访问类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306471/