我创建了一个 ILogger
接口(interface)和一个实现 ILogger
的 ListViewLogger
类,现在为 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/