这是一个奇怪的......也许。
总结:我正在使用32feet库进行蓝牙通信。我们共享的代码可以在.Net compact(移动设备)和标准上运行。净。
我正在寻找一个可能存在的暗示性解决方案或一些我不知道的设计模式。
32feet为紧凑型框架提供了一个组件,为标准提供了一个组件。程序集具有相同的名称,相同的类名。
我需要提出一个解决方案,我有一个任何人都可以使用的通用类,它将知道如何连接。我甚至不确定这是否可行。到目前为止我倾向于解决方案是有两个独立的组件......一个用于移动。 ..一个标准。它感觉不对,我想知道是否有更好的路线。是否可以使用这种DI来在运行时选择正确的二进制文件?
实施例: 公共抽象BluetoothBase { 公共蓝牙基地() { }
Public int Connect ()
{
// this is where problem lies. Need to tell class which assembly to use based on OS. So far I'm finding this is not possible. ..
}
答案 0 :(得分:1)
这将添加一个界面和2个需要维护的实现,但我认为这样可以实现您的目标。
在共享代码中定义接口。
public interface IBluetooth
{
//methods you need from the base class.
}
在移动平台特定代码中
public class MobileBluetooth : IBluetooth
{
//Implement
}
在桌面平台特定代码中
public class DesktopBlueooth : IBluetooth
{
//Implement
}
对于您的框架或蓝牙基类,有一个初始化方法,您可以在其中注入接口。
public abstract BluetoothBase
{
private IBluetooth _connection;
public Init(IBluetooth connection)
{
_connection = connection;
}
public int Connect()
{
//use the interface to connect.
}
}
答案 1 :(得分:1)
简而言之,最简单的方法如下:
您有两个具有完全相同名称,相同类类型,相同所有内容的程序集。只有区别?我的情况是一个是为桌面编译而另一个是为紧凑框架编译的
在这种情况下,程序集称为InTheHand.Personal.Net
最简单的方法是执行以下操作:
在visual studio中,右键单击您的项目并选择“卸载项目”。这是必要的,因为引用管理器不允许您添加两个具有相同名称的程序集。要解决此问题,请手动编辑项目文件。
将两个参考元素添加到三个参考部分。每个指向dll的路径位置。
给每个人。 Dll是自己的别名。
在你的代码中,只需使用extern别名指令来引用每个程序集。
如果您像我一样进行移动而非非移动,请将每个移动到#if PocketPC指令中
然后为每个
创建一个使用别名