.NET类有什么信息可以调用它?

pet*_*bil 3 .net assemblies class

我正在构建一个类项目(单独的dll),它将包含各种帮助方法和常用功能,可以被一系列不同的应用程序访问 - ASP.NET网站,Web服务和Windows服务.

有没有办法让这个中立类可以确定调用它的应用程序的类型(例如,它可以选择如何记录信息)?

关于什么应用程序调用它的类,还有哪些"元"信息可供使用?

Dav*_*rab 9

一个班级应该不知道如何使用它.记住它是一个黑盒子.

如果要将日志记录公开给类,请创建一个日志记录接口,该接口将在构造函数或方法中传递给类.

然后,每个调用应用程序都可以实现自己的记录器版本,并且日志记录实现可以具有您要查找的详细信息.并且该类仅将接口用于LogMessage,LogError等..


Kev*_*ock 5

您可以通过查看堆栈跟踪来获取信息:

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)

  • 如果他问过如何用脚射击自己,是否应该回答问题? (3认同)
  • 很高兴看到有人回答了被问到的问题 (2认同)