Nav*_*K N 4 c# delegates interface
我的解决方案有几个项目,包括几个库和一个UI项目.目前它是一个Windows窗体应用程序,我使用log4net进行日志记录.此UI项目仅引用log4net,此项目维护配置文件.但我也希望从我的库中登录.
通常用于执行此操作的方法是将日志记录调用包装在接口后面.创建一个名为utilities的公共项目,并将此接口添加到此项目中.现在,该项目可用于所有项目,并可使用此接口进行日志记录.
我正在考虑一种替代设计,它涉及传递代理并减少耦合并避免不必要的接口.
考虑以下课程来自我的图书馆.
public sealed class Foo
{
Action<string> log;
Action<string, Exception> logException;
public Foo(Action<string> log, Action<string,Exception> logException)
{
this.log = log;
this.logException = logException;
}
public void Work()
{
WL("Starting work");
WL("Completed step1");
.........
}
void WL(string message)
{
if(log != null) log(message);
}
void WL(string message, Exception exception)
{
if(logException != null) logException(message, exception);
}
}
Run Code Online (Sandbox Code Playgroud)
现在从调用代码,我可以轻松地传递日志记录方法.就像是
Foo foo = new Foo(message => Console.WriteLine(message),
(message, exception) => Console.WriteLine("{0},{1}", message, exception));
foo.Work();
Run Code Online (Sandbox Code Playgroud)
使用控制台进行解释,实际上我将在这里使用日志代码.
1 - 你认为这是一个更好的解决方案吗?我认为这更好,因为它更松散耦合.
2 - 还有其他更好的解决方案吗?
这是我在这里找到的唯一相关问题
有什么想法吗...?