如何构建依赖于当前项目调用另一个依赖项的函数的依赖项?

时间:2016-05-02 20:56:47

标签: c# mysql xamarin.android

说明: 我有一个庞大的项目,它构建在一个可靠的框架上,其中必须连接到数据库的函数根据一些条件(在简单的术语中我们可以说它的真/假布尔值)有不同的工作方式。简单来说,当它访问数据库时,它可以作为Web服务或直接的mysql连接进行访问。

现在我开始创建一个Xamarin项目(android)并且我想导入这个框架,但是,Xamarin并不支持mysql ...虽然框架可以调用webservice来获取mysql数据,mysql代码就在那里它阻止了我的xamarin项目的建立。我甚至无法使用"#if"因为还有对mysql dll的引用。我将如何分割我的类dll文件,以便这个android项目不加载mysql dll,只是调用Web服务的函数的一部分? 函数的示例如下:

public static void InsertStuff(object stuff, bool useDirectMysql)
{
    if (useDirectMysql)//I would like that this part only appears/works if its not the xamarin project, however, i can't use #if as the framework dll still has a reference to the mysql dll
    {
        //MySqlConnection connection = new MySqlConnection....
        //insert stuff
    }
    else
    {
        //Insert stuff with a web service function.. (compatible with xamarin)
    }
}

2 个答案:

答案 0 :(得分:1)

实现平台特定功能的模式如下:

  • 在共享项目中创建一个具有InsertStuff方法的接口。

  • 使用DI注入依赖项。

  • 相应地在每个平台项目中实现界面。

答案 1 :(得分:0)

Zdravko提供了一个很好的工作

但是,我通过字面编译器完成了我想要的内容,从框架中评论属性,函数,对象和引用("使用......")的每一个用法或引用。因此虽然它引用了项目引用部分中的.dll文件,但Visual Studio似乎没有编译/嵌入那些未使用的dll。

我的最终解决方案是:

1 - 创建2个构建配置,一个用于xamarin项目和框架,另一个用于我的普通Windows程序和框架。

2 - 评论一切与移动设备不兼容(但仍保留项目参考)

3 - 创建了一个编译器变量,如 A 。当我想编译我的xamarin项目时,我选择只允许框架和xamarin的构建配置,将 A 放在我的框架dll中并进行编译。

4 - 在构建正常的c#/ c ++ / etc程序时更改配置并远程 A

一切都在同一个VS解决方案上。