【问题标题】:Class visible only to shared project?仅对共享项目可见的类?
【发布时间】:2016-04-26 17:04:48
【问题描述】:

我想将我的 C# 程序的平台无关逻辑分离到一个共享项目中。现在我想从我的平台特定项目中隐藏存储库、服务类等。我可以使用什么访问修饰符? internal 似乎不起作用,因为它们被编译成同一个可执行文件(我认为),我不想用 InternalsVisibleToAttribute 标记我的所有类。

有没有办法让我的共享项目中的类对我的平台特定代码不可见?

【问题讨论】:

    标签: c#


    【解决方案1】:

    只有一个地方您需要知道您尝试实例化的真实类型 - 平台提供程序。其他人应该只使用平台不变的接口。

    然后,所有特定于平台的实现都可以是私有的或内部的,您只需要确保提供者具有访问权限即可。您的应用程序将使用特定于平台的提供程序来获取特定于平台的实例,而只使用平台不变的接口。

    至于“被编译成单个可执行文件”,这并不重要。很可能您完全关心编译时检查,并且无论最终可执行文件如何打包,它仍然存在。部分信任环境中的反射有一些限制,但到那时你不应该关心 - 你只是为了编译检查,而不是运行时安全。

    【讨论】:

      【解决方案2】:

      不,C# 中没有这样的功能。如果您考虑使用 InternalsVisibleToAttribute 选项标记每个其他项目,那就可以了。

      如果可能,您可以将这些其他文件(存储库、服务文件)拆分到另一个程序集,该程序集不包含在您的共享项目中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-14
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多