2016-05-02 68 views
1

解释: 我有一个巨大的项目,建立在一个坚实的框架,根据一些条件(简单地说,我们可以说它是一个真/假布尔),必须连接到数据库的函数的工作方式不同。简单来说,当它访问数据库时,它可以作为Web服务或直接的mysql连接访问。如何根据当前项目构建调用另一个依赖项的函数的依赖项?

现在我开始创建一个Xamarin项目(android),我想导入这个框架,但是,Xamarin不支持mysql ...虽然框架可以调用web服务来获取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) 
    } 
} 

回答

0

兹德拉夫科提供一个很好的解决办法

不过,我完成了我想要的东西通过逐字编译器评论性质,职能,对象和引用的每一个使用或引用(“使用...”)该框架。因此,虽然它引用了项目引用部分中的.dll文件,但Visual Studio似乎不编译/嵌入那些未使用的dll。

我最终的解决办法是:

1 - 创建2种生成配置,一个用于xamarin项目的框架,另一个用于我正常的Windows程序和框架。

2-评论一切与移动xamarin不兼容(但仍保持该项目的引用)

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

4-Change configuration and remote A当建立正常的c#/ C++/etc程序时。

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

+0

不,@ZdravkoDanev提供了正确的方法来做到这一点......你的答案*是一种解决方法:-) – Jcl

+0

@Jcl不,我不是。他是面向对象框架的答案,而我的大多数框架只有静态方法。我不能做接口,不能。我确实有一些对象可以移动到另一个类中,但是,其80%的静态类和方法使用引用。 – Zananok

1

实现平台特定功能的模式是这样的:

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

  • 使用DI注入依赖关系。

  • 相应地在每个平台项目中实现接口。

相关问题