我正在尝试修改日志记录库。这就是我卡住的地方。我使用一个枚举(我们将其称为ActionType)来识别我的操作,如UserLogin,PurchaseOrder ...数百种。我在记录器方法中使用了这种类型。但是,由于为了松散耦合而将我的记录器库与项目特定的代码分开,并且基础库无法访问项目中定义的ActionType,因此如何实现此目的。为了澄清这一点,让我解释一下java中的相同情况。 Java允许枚举实现接口(interface)。所以我可以写:

在基本记录器库中,我可以定义;
public interface IActionType {}
在我的几个项目之一中
public enum ActionType implements IActionType {UserLogin, PurchaseOrder, .....}
因此,当我调用 logger.log(ActionType.UserLogin, ....)基库时,将获得基础操作。这些就足够了。有什么可以在C#中完成它的方法吗?顺便说一句,我考虑过使用IoC容器,但是我想要一些更优雅的东西。

非常感谢您的帮助...

最佳答案

这是log4net用于Level类的方法(是的,它是类,而不是枚举):

public class ActionType : IActionType
{
   public static readonly ActionType UserLogin;
   public static readonly ActionType PurchaseOrder;

   static ActionType()
   {
       UserLogin = new ActionType(1, "User Login");
       // ...
   }

   public ActionType(int value, string name)
   {
       // verify arguments values
       Value = value;
       Name = name;
   }

   public int Value { get; private set; }
   public string Name { get; private set; }
}

和界面
public interface IActionType
{
    int Value { get; }
    string Name { get; }
}

用法:
logger.Log(ActionType.UserLogin);

关于c# - 公开基础库中定义的枚举类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14286898/

10-12 20:28