使用枚举 C# 为具体 class 创建接口?

Creating interface for concrete class with enum C#?

请原谅任何错误,这是我的第一个问题。我真的很感激这里的一些指导。我尝试搜索以前的问题,但我不能完全正确地表达问题。

我正在尝试创建一个带有接口 class 的简单记录器,但我想在解决方案的不同项目中使用该接口和记录器 class。我试图将所有接口与具体实现分开。

但是,我创建的记录器 class 包含一个枚举:

public class Logger : ILogger 
{
    public enum LogSeverity
    {
        None = 0,
        Verbose = 1, 
        Information = 2,
        Warning = 3,
        Error = 4,
        Critical = 5
    }

    public void Log(string message)
    { ... }

    public void Log(string message, LogSeverity severity)
    { ... }
}

然后我有一个 ILogger 的接口(在一个单独的项目中):

public interface ILogger
{
    void Log(string message);

    void Log(string message, LogSeverity severity);
}

我 运行 遇到了这个问题,因为接口不知道 LogSeverity 枚举,如果我尝试将两个单独的项目连接在一起,我 运行 会遇到循环依赖问题.

谁能给我一些关于如何在使用界面时管理枚举的见解?这可能是我所缺少的非常简单的东西。抱歉,如果问题如此含糊。这一切都是在我尝试实现依赖注入的同时将我的接口分离到他们自己的项目中时发生的。

非常感谢任何反馈!提前致谢!

你应该可以把Enum放在有接口的项目中。

将界面分离到一个单独的项目中的想法是,它可以在不同的项目中重复使用,以创建可以根据需要注入的不同 ILogger 实现。如果 ILogger 引用 LogSeverity 那么这个接口的潜在实现者将需要访问它 - 所以将它放在一个具有接口的另一个具体实现的项目中真的没有意义

你的枚举 LogSeverity 描述了一个契约,所以如果你想把它分成两个程序集,将接口和枚举添加到一个程序集,将实现添加到另一个程序集。

接口组件:

public enum LogSeverity
{
    // enum items
}

public interface ILogger
{
    void Log(string message);

    void Log(string message, LogSeverity severity);
}

实现程序集:

public class Logger : ILogger 
{

    public void Log(string message)
    { ... }

    public void Log(string message, LogSeverity severity)
    { ... }
}