0

我有一组针对 Silverlight 和 Windows Phone 7.5 的库,在我的库中,我有一个导航解决方案,它具有通用界面但不同的实现 - 取决于平台。(SL & WP7 Navigation 非常相似,有非常细微的差别,遗憾的是无法避免)

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

干杯

编辑 也欢迎任何替代解决方案,我仍在尝试拼凑有关可移植类库的任何信息,以查看它们的能力

4

2 回答 2

3

实际上,这可能效果不佳。即使您可以可靠地确定您正在运行的环境(可能是对 Environment.OperatingSystem 的某种破解),如果您的实现有任何复杂性,您也不太可能完全坚持定义类型的最低公分母/方法等

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

于 2012-08-23T22:25:22.320 回答
1

没有一个好方法可以做你想做的事。可移植库并没有消除对特定平台项目的需求,它只是有助于促进特定平台项目以与平台无关的方式进行对话。

我倾向于建议 INavigationService 的具体实现存在于平台特定项目本身中,而通用抽象存在于可移植项目中。然后使用 IoC 容器或类似 ServiceLocator 的框架来连接它们(我推荐 Autofac)。我在为 MSDN 写的一篇文章(事实上,我为导航服务这样做)中做过类似的事情:使用可移植类库创建连续客户端。请务必下载源代码以查看具体示例。

于 2012-09-12T21:29:00.597 回答