Как получить доступ к свойствам класса через экземпляр интерфейса, используя Unity.WebApi - PullRequest
0 голосов
/ 14 ноября 2018

Можно ли выставить открытые свойства класса в другом классе через IOC.Я создаю экземпляр интерфейса, но я не могу получить доступ к открытым свойствам класса.Я использую Unity.WebApi для разрешения зависимостей.

Класс TransactionService

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
     }



 }

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы управляете службами, то проведите рефакторинг интерфейсов для предоставления нужных членов

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...