c# - 如何使用 Unity.WebApi 通过接口(interface)实例访问类属性

标签 c# oop asp.net-web-api interface inversion-of-control

是否可以通过 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/

相关文章:

c# - DBContext Builder 不包含 .NET 6 中 UseSqlServer 的定义

Asp.net Web API 日期时间格式

c# - 仅当不记名 header 存在时才验证 JWT

无法识别 C# 属性

c# - 比较一个字符串到多个字符串

c++ - 如何在用户输入的情况下创建类的对象数组?

java - 为什么 Java 不支持泛型 Throwables?

oop - 去 "polymorphism"

c# - WebAPI自托管503错误(HttpSelfHostConfiguration设置了HttpSelfHostConfiguration)

c# - 比较大整数列表和小整数列表的最有效方法是什么?