我想将我的C#程序的独立于平台的逻辑分离到一个共享项目中。现在我想从我的平台特定项目中隐藏存储库,服务类等。我可以使用哪种访问修饰符? internal
似乎不起作用,因为它们被编译成相同的可执行文件(我认为),我不想用InternalsVisibleToAttribute
标记我的所有类。
有没有办法让我的共享项目中的类对我的特定于平台的代码不可见?
答案 0 :(得分:1)
只有一个地方需要了解您尝试实例的真实类型 - 平台提供商。其他人应该只使用平台不变的接口。
然后,所有特定于平台的实现都可以是私有的或内部的 - 您只需要确保提供者具有访问权限。您的应用程序将使用特定于平台的提供程序来获取特定于平台的实例,而只使用平台不变的接口。
至于“被编译成单个可执行文件”,这并不重要。很可能你完全关心编译时检查,无论最终的可执行文件是如何打包的,它仍然存在。在部分信任环境中对反射有一些限制,但到那时你不应该关心 - 你只是在编译检查中,而不是运行时安全。
答案 1 :(得分:0)
不,C#中没有这样的功能。如果你考虑用InternalsVisibleToAttribute
选项来标记每个其他项目,那就可以了。
如果可能,您可以将其他文件(存储库,服务文件)拆分为另一个程序集,该程序集不包含在您的共享项目中。