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