0

我有一套库,目标Silverlight & Windows Phone 7.5,在我的图书馆我有一个导航解决方案,有一个共同的界面,但不同的实现 - 取决于平台。 (SL & WP7导航非常相似,但有很细微的差别,不幸的是它们无法避免).NET 4.5可移植类库:是否可以在运行时确定平台?

如果我要编写一个可移植的类库,它将包含我的INavigationModel接口+两个实现,有没有什么办法告诉哪个平台调用可移植类库?这些信息将帮助我在运行时选择正确的解决方案。

干杯

编辑 任何替代的解决方案是值得欢迎的过,我仍然试图拼凑关于便携式类库的任何信息,看看他们能够

回答

3

实际上,这可能不太好。即使您可以可靠地确定您正在运行的环境(也许是对Environment.OperatingSystem的某种攻击),但如果您的实现具有任何复杂性,则不太可能完全遵循定义类型/规则的最小公分母,方法等。

可移植程序集的全部要点是定义真正共享的位(实用程序方法,接口等) - 可能更好的解决方案可能是在便携式程序集中定义具有共享功能的基类/接口,然后扩展到特定于平台的程序集以实现不可移植的位。

+0

我担心它可能会出现这种情况,还是让我们来看看是否有其他选项可供探索 – Maciek

+0

最近的一篇文章可能也有帮助:http://blogs.msdn.com/b/dsplaisted/archive/2012/08 /27/how-to-make-portable-class-libraries-work-for-you.aspx – nitzmahone

1

没有一个好方法可以做你想做的事情。便携式图书馆并不需要具备特定于平台的项目,它只是帮助促进特定于平台的项目以平台不可知的方式进行交流。

我倾向于建议INavigationService的具体实现本身存在于特定于平台的项目中,而常见的抽象存在于可移植项目中。然后使用IoC容器或类似ServiceLocator的框架来连接它们(我推荐Autofac)。我在为MSDN写的一篇文章(实际上是我做了这个导航服务)中做了类似的操作:Create a Continuous Client Using Portable Class Libraries。请务必下载源代码以查看具体示例。

+0

这就好像我已经开始使用它了;当我创建PCL的一个实例时,我传递了包含平台特定实现所需接口的实例。当然,现在我必须明白你的意思了,因为听起来好像我可以避免实例传递;) –

相关问题