使内部枚举通过 API 命名空间可见

问题描述 投票:0回答:1

我正在为现有软件项目编写 API。我的 API 通常仅充当包装器,并将函数调用直接发送到软件逻辑。当然我想避免编写重复的代码。因此,我的问题是如何使内部枚举/类/等对使用 API 的用户可见。

我会用一个小例子来解释:

内部逻辑:

namespace internlogic{
  public class Log {
    public enum Level = {All, Debug, Error, Fatal);

    public static SetLogLevel(Level lvl){
       ...
    } 
  }
}

API:

namespace API {
  public class APILog {

   public SetLogLevel(internlogic.Level lvl)
     internlogic.Log.SetLogLevel(lvl);
   }
}

外部用户现在仅使用 API 命名空间,我正在寻找他可以使用枚举级别的可能性。是否可以将此枚举包含到 API 命名空间中而不编写“包装器枚举”?我想避免用户必须包含很多不同的命名空间。

外部 API 用户:

using namespace API;

...
Level loglvl = Level.Debug //Its not possible because Level is not in the API namespace
APILog.setLogLevel(loglvl);
...

到目前为止,还没有实现内部逻辑的访问控制。

c# .net dll namespaces
1个回答
0
投票

只是举个例子。这就是我在评论中通过创建 API-LogLevel-Enum 的意思:

namespace API
{
    public enum LogLevel
    {
        All, Debug, Error, Fatal
    }

    internal static class LogLevelExtension
    {
        internal static internlogic.Log.Level GetLevel(this LogLevel level)
        {
            switch (level)
            {
                case LogLevel.All:
                    return internlogic.Log.Level.All;
                case LogLevel.Debug:
                    return internlogic.Log.Level.Debug;
                case LogLevel.Error:
                    return internlogic.Log.Level.Error;
                case LogLevel.Fatal:
                    return internlogic.Log.Level.Fatal;
                default:
                    throw new Exception("This shoudn't happen! : )");
            }
        }
    }
}

你可以这样使用它:

public void DoSomething(LogLevel level)
{
   internlogic.Log.Level internLevel = level.GetLevel();
   ...
}
© www.soinside.com 2019 - 2024. All rights reserved.