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

时间:2015-05-25 16:32:27

标签: c# interface dependency-injection enums separation-of-concerns

原谅任何错误,这是我的第一个问题。我真的很感激这里的一些指导。我试着寻找以前的问题,但我无法正确地说出问题。

我尝试使用接口类创建一个简单的Logger,但我想在解决方案中的单独项目中使用接口和Logger类。我试图将所有接口与具体实现分开。

但是,我创建的Logger类包含一个枚举:

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枚举,我遇到了这个问题,如果我尝试将两个单独的项目连接在一起,我会遇到循环依赖问题。

在使用界面时,有没有人可以给我一些关于如何管理枚举的见解?这可能是我很遗憾的事情。对不起,如果问题太模糊了。这一切都是因为我试图在将接口分离到自己的项目时实现依赖注入。

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

2 个答案:

答案 0 :(得分:4)

您的枚举LogSeverity描述了一个契约,因此如果您希望将它分成两个程序集,请将interface和enum添加到一个程序集并将实现添加到另一个程序集。

接口汇编:

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)
    { ... }
}

答案 1 :(得分:2)

您应该能够使用界面将Enum放入项目中。

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