【问题标题】:How to resolve dependency in asp.net mvc when can only access Interfaces and don't have access to implementation classes of them当只能访问接口而无权访问它们的实现类时如何解决asp.net mvc中的依赖关系
【发布时间】:2020-09-18 10:47:10
【问题描述】:

当我运行 API 时,我在构造函数中注入了(AccountAccessInterface)接口,我无法解析它的依赖关系,因为我从 .dll 获取该接口并且无权访问它的实现。所以我需要一些方法,以便我可以以任何方式解决控制器内部的依赖关系请因为没有接口的实现(隐藏实现)类,我在依赖解析器的 API 中遇到错误

public class AdminController : ApiController
{
    private readonly AccountAccessInterface _accountAccessInterface;

    public AdminController(AccountAccessInterface accountAccessInterface)
    {
        _accountAccessInterface = accountAccessInterface;
    }


    // to get account if by user id
   [Route("api/admin/ProcessTrsanctionAndSave")]
   [HttpGet]
    public void ProcessTrsanctionAndSave()
    {


        BankDB.BankDB bankDB = new BankDB.BankDB();
        bankDB.ProcessAllTransactions();
        bankDB.SaveToDisk();
    }
}

【问题讨论】:

  • 如果AccountAccessInterface 不是为注入而设计的,依赖注入将无济于事。以通常的方式获取接口(无论可能是什么),并在必要时使用声明适合 DI 的接口的代码包装您的实现

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

依赖服务只能解析它提供的服务,它不能神奇地为你创建一个。

如果您无法通过接口创建您尝试解析的类的实例,那么恐怕您无能为力。

但是,如果您可以实例化该类,那么您可以围绕它创建一个包装器并将其传递给依赖服务。

【讨论】:

    【解决方案2】:

    我通过以下工作解决了这个问题。 当我们无法访问实现类时,这意味着接口将从任何类作为方法返回。所以如果我们这样做了

    TransactionAccessInterface 是这里的接口,Models.Globoclass.myBank.GetTransactionInterface() 是作为方法返回的接口的基类。

     public object SelectTransaction(uint TransactionID)
        {
            TransactionAccessInterface myint = Models.Globoclass.myBank.GetTransactionInterface();
            myint.SelectTransaction(TransactionID);
            Transaction_Details transaction_Details = new Transaction_Details();
            transaction_Details.amount = myint.GetAmount();
            transaction_Details.recvrAccount = myint.GetRecvrAcct();
            transaction_Details.sendrAmount = myint.GetSendrAcct();
    
            return transaction_Details;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多