所以我有以下挑战。
我有gradle项目结构。
主要项目
- a。 Android(#Sub-Project 1)
- b。下议院(#子项目2)
- C。 Http-Comms(#Sub-Project 3)
摘要
我有上面的3个项目。 HTTP-Comms
必须是独立的,它依赖于Commons
项目。 HTTP-Comms有一个接口和实现器,它公开了启动和停止服务器的方法。问题是我在HTTP-Comms
中引用了Android
项目,并希望将其解耦。因此,正常版本可以运行此功能,开发人员构建将运行 此功能。如果我不将此项目包含在正常构建的分发中,Android将因ClassNotFound而失败..
简要解释
现在这个HTTP-Comms project
有一个NanoHttpdServer实现,并且有许多类引用与服务器和其他实用程序类相关的库。它独立于自己。我们有一个接口IHttpComms,它有启动和停止服务器的方法
interface IHttpComms{
public void startServer();
public void stopServer();
public void serveRequest();
}
class Controller implements IhttpComms{
//Implements the feature
// reference to other classes in the HTTP-Comms project.
}
现在还有另一个Android project
,其中包含启动和停止服务器的操作按钮。所以这取决于HTTP-Comms
项目。我正在这里做
IhttpComms comms = new Controller();
因此在HTTP-Comms和Android项目之间建立紧密耦合。
可以引用Commons project
的位置,并且应该在这些项目之间具有公共代码。 But Commons project cannot hold reference to HTTP-COMMS
现在,由于HTTP-Comms对我们来说是一个孵化功能,我们要求它在某些时候不要成为构建过程的一部分。
我的问题是......
我可以使用任何依赖注入framewroks,我将能够 将依赖对象注入项目之外。 ??就像有一个Controller实例并注入Android?
没有DI框架..任何其他设计模式解决方案?
答案 0 :(得分:0)
问题在于IhttpComms及其实现都在同一个项目/ jar中。我会将IhttpComms移动到它自己的项目中,并让Android项目引用这个新项目,该项目应该只有Interfaces和Abstract类。这样你就可以将你的Android项目与Http-Comms中的具体类分开。然后你可以自由地使用你喜欢的任何IhttpComms实现,并在运行时使用(你猜对了)一个DI框架甚至简单的Class.forName
加载它。总结: