pet*_*bil 3 .net assemblies class
我正在构建一个类项目(单独的dll),它将包含各种帮助方法和常用功能,可以被一系列不同的应用程序访问 - ASP.NET网站,Web服务和Windows服务.
有没有办法让这个中立类可以确定调用它的应用程序的类型(例如,它可以选择如何记录信息)?
关于什么应用程序调用它的类,还有哪些"元"信息可供使用?
一个班级应该不知道如何使用它.记住它是一个黑盒子.
如果要将日志记录公开给类,请创建一个日志记录接口,该接口将在构造函数或方法中传递给类.
然后,每个调用应用程序都可以实现自己的记录器版本,并且日志记录实现可以具有您要查找的详细信息.并且该类仅将接口用于LogMessage,LogError等..
您可以通过查看堆栈跟踪来获取信息:
StackTrace stackTrace = new StackTrace(); // Get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // Get method calls (frames)
string methodName = stackFrames[0].GetMethod().Name; // Get method name
string type = stackFrames[0].GetType().ToString(); // Get the calling type
Run Code Online (Sandbox Code Playgroud)
但是,我认为更好的解决方案是使用更面向对象的方法.创建实现相同接口的不同记录器.将记录器的实例传递给类,具体取决于创建和使用类的内容.
public interface ILogger
{
void Log(string message);
}
public class MyWorkerClass
{
private ILogger m_Logger;
public MyWorkerClass(ILogger logger)
{
m_Logger = logger;
}
public void Work()
{
m_Logger.Log("working")
}
// add other members...
}
public class MyService
{
public void DoSomething()
{
ILogger logger = new MyServiceLogger();
MyWorkerClass worker = new MyWorkerClass(logger);
worker.Work();
}
}
Run Code Online (Sandbox Code Playgroud)