C# 分离接口和实现
假设我有一个项目a,它引用了项目B。B中定义了一些类,a有一个接口ISomething,它的实现位于a中,并使用B的类。然后我想创建C项目和A接口的另一个实现,它使用C的类。问题是:我想将这个接口的实现移动到相应的项目中,这样我就可以定义我想在构建脚本中使用的项目,而忽略其他项目。尽管如此,我还是希望保存接口和它的实现之间的连接,因为已经存在大量使用该接口的代码。到目前为止,我一直在考虑以下选项:C# 分离接口和实现,c#,design-patterns,C#,Design Patterns,假设我有一个项目a,它引用了项目B。B中定义了一些类,a有一个接口ISomething,它的实现位于a中,并使用B的类。然后我想创建C项目和A接口的另一个实现,它使用C的类。问题是:我想将这个接口的实现移动到相应的项目中,这样我就可以定义我想在构建脚本中使用的项目,而忽略其他项目。尽管如此,我还是希望保存接口和它的实现之间的连接,因为已经存在大量使用该接口的代码。到目前为止,我一直在考虑以下选项: 在项目A中使用适配器模式,它返回ISomething,引用两个实现,并在缺少C时调整B的实现,反
- 在项目A中使用适配器模式,它返回ISomething,引用两个实现,并在缺少C时调整B的实现,反之亦然。缺点是,在我看来,所有接口实现关系都是无用的
- 创建项目D,它包含接口,并由A、B和C引用,然后在此项目中将接口解析为它的一个实现。项目接收具体实例并使用它。缺点是我需要创建另一个库并污染存储库
还有什么更好的选择吗?我肯定会选择D项目 有时你会在解决方案中看到,接口甚至没有被共享,或者本来是要被共享的,这显然有些过分,但我想说,对于你的情况来说,这是最好的方法 现在,您可能不想将其作为dll或项目引用,因为
为了避免这两个问题,我将从这个项目D中创建一个NuGet包。您不需要在NuGet.org上托管它,您可以使用内部部署服务器或最简单的方法(通过指向本地或共享文件夹)自行托管它。出于某种原因,您需要在单独的项目中保留实现吗?i、 e.不希望该代码存在于某些构建中?我的主要项目针对多个平台,我使用脚本根据运行该脚本的参数生成特定的解决方案文件。我想要的是定义一个新的参数,它将指定我想要在解决方案(B或C)中使用的项目,这就是为什么我想要在单独的项目中移动实现