C# 如何使用Unity.WebApi通过接口实例访问类属性
是否可以通过IOC公开不同类中的类公共属性。我正在创建接口的实例,但无法访问类的公共属性。我正在使用Unity.WebApi解析依赖项 交易服务类C# 如何使用Unity.WebApi通过接口实例访问类属性,c#,oop,asp.net-web-api,interface,inversion-of-control,C#,Oop,Asp.net Web Api,Interface,Inversion Of Control,是否可以通过IOC公开不同类中的类公共属性。我正在创建接口的实例,但无法访问类的公共属性。我正在使用Unity.WebApi解析依赖项 交易服务类 public class TransactionService : ITransactionService { private readonly IMRepository _mRepository; private readonly IFService _fGateway; public TransactionServic
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);
}
}
}
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);
//...
}
//...
}
}
公共类事务服务:ITransactionService{
私有只读IMRepository\u mRepository;
专用只读IFService fGateway;
公共事务服务(IMBARespository MBA存储库、IFService fService){
_mRepository=mRepository;
fGateway=f服务;
}
私有列表SearchTransacionsByUser(FUser objFUser){
foreach(某物中的var项){
TransactionOperationInput=新TransactionOperationInput(){
标准=_标准,
OID=objFUser.OID.ToString(),
金额=模糊器。金额,
};
fGateway.Search(输入);
//...
}
//...
}
}
最后,确保向IoC/DI容器注册适当的抽象和实现。您是否能够更新接口以包含缺少的属性?这看起来像是一个设计问题。否则您将需要强制转换接口。然而,这是一个糟糕的设计,因为它与实现问题紧密结合,这与注入抽象的原因背道而驰。我无法控制_input=new TransactionOperationInput()b因为它是dll文件的一部分。我指的是
IFService
interface可以让IFService公开dll中TransactionOperationInput类的对象吗?我正在考虑在TransactionService类中设置TransactionOperationInput对象,我可以在其中设置所有输入,然后将其作为参数传递给FSService中的search方法。@user1263981是的,您可以这样做。这也是一个更可靠的设计。@user1263981根据您的答案检查更新的答案comment@user1263981如果你觉得答案很有用,记得也要投票支持。谢谢。搜索(TransactionOperationInput)是TransactionService中的私有方法。TransanctionService实现了两个方法,它还有一个私有方法,在类中的实现方法中调用。