【问题标题】:Pass argument to abstract class constructor c#将参数传递给抽象类构造函数c#
【发布时间】:2021-05-08 06:59:02
【问题描述】:

我有一个像下面这样的抽象类:

Public abstract class Test
{
    private readonly ILogger _logger;

    public Test(ILogger logger)
    {
        _logger = logger;
    }

    public ActionResult GetData()
    {
        try
        {

        }

        catch(Exception exe)

        {

            _logger.log("Exception");

        }
    }
}

现在,我有另一个类以以下方式使用上述内容:

Public class TestProcess
{
    public Test tst {get; protected set;}

    public TestProcess(Test tesstt)
    {
        tst = tesstt;
    }
}

现在,我想将 ILoggerTestProcess 类传递给我的抽象构造函数。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 请注意,由于TestProcess 接受Test,因此在调用TestProcess 构造函数时,ILogger 已经传递给Test。你还是想通过哪个ILogger?我在这里看不到ILogger
  • 可能你想在Test 中暴露internal ILogger Logger {get;}?那么TestProcess就可以使用了
  • 请编辑您的问题并添加以下代码(1)派生自Test的类(因为您不能直接实例化Test,因为它是抽象的)和(2)代码实例化TestProcess 实例。一旦我看到我可能会告诉你如何修改它来满足你的要求。

标签: c# asp.net .net asp.net-mvc oop


【解决方案1】:

推荐做以下

Public class TestProcess:Test
{
    public ILogger _logger {get; set;}

    public TestProcess(ILogger logger): : base(logger)
    {
        _logger = logger;
    }
}

【讨论】:

    【解决方案2】:

    有两种方法可以做到这一点,在这两种方法中你都需要改变你的代码。

    1. 使用 Test(abstract) 类扩展您的 TestProcess 类。

      公共类 TestProcess:Test{}

    2. 将您的抽象类更改为普通类并在那里实现单例。那么您可以在创建 Test 类的实例时传递 ILogger。

      公共类测试{}

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多