c# - 依赖注入(inject),不知道在哪里放置方法

标签 c# dependency-injection interface

我创建了一个 ILogger 接口(interface)和一个实现 ILoggerListViewLogger 类,现在为 ILogger 有一个不应该存在的方法 (SetListViewReference),因为并非所有记录器都会记录到 ListView,而且我不知道将其放置在哪里,因为我正在做 依赖注入(inject)但我需要这个方法,那么我应该做什么?谢谢!

using System;
using System.Windows.Forms;

namespace AutoTweet
{
    public interface ILogger
    {
        void Log(string text);

        void SetListViewReference(ListView listview);
    }

    public class ListViewLogger : ILogger
    {
        private ListView _lvLog;

        public void Log(string text)
        {
            _lvLog?.Items.Add(makeLvi(text));
        }

        public void SetListViewReference(ListView listview)
        {
            _lvLog = listview;
        }

        private ListViewItem makeLvi(string text)
        {
            ListViewItem ret = new ListViewItem { Text = DateTime.Now.ToString() };
            ret.SubItems.Add(text);
            return ret;
        }
    }
}

最佳答案

有一个新的 IListViewLogger 接口(interface),它将继承自 ILogger 并具有该附加方法:

public interface ILogger
{
    void Log(string text);
}

public interface IListViewLogger : ILogger
{
    void SetListViewReference(ListView listview);
}

public class ListViewLogger : IListViewLogger
{
    //...
}

设计实际上取决于 ListView 的范围。

如果应用程序中只有一个 ListView,那么它应该设置在组合根中的某个位置,您可以在其中设置它,因为您知道记录器的具体类型。如果范围是每个 View ,那么拥有这个扩展接口(interface)就完全没问题,因为您需要以某种方式告诉记录器应该记录到哪里。

关于c# - 依赖注入(inject),不知道在哪里放置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568160/

相关文章:

c# - 使用 UsingFactoryMethod 在 Windsor 中进行通用注册

c# - 我应该为移动客户端/服务器对象使用哪种C#类模式

c# - 需要有关 GetShortPathName 的帮助

c# - 获取字典中所有值的 Lambda 表达式

c# - 路径中的哈希字符抛出 DirectoryNotFoundException

Scala - 当依赖类也使用相同的泛型类型时,使用 guice 注入(inject)泛型类型

c# - 正则表达式的实现

android - Dagger 2 - 注入(inject)构造函数或提供方法哪个更好?

oop - 接口(interface)应该知道域对象吗?

java - 如何将其变为 OOP