如何在c#中没有引用的情况下将类暴露给外部项目

Or *_*r K 2 .net c#

我有3个名为A,B,C的项目.

在项目AI中有一个名为"Car"的类.

在项目BI中引用了A,并在项目BI中创建了"Car"列表.

项目C参考B.

我想将项目B中的列表放到项目C中并对其执行某些操作.

问题:

在项目CI中不允许引用项目A,其中类"Car"就可以了,所以项目C不知道"Car"类,我不能做下一个命令:

List<Car> cars = B.GetCars();
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Sma*_*tis 9

解决方案

我会为此使用一个接口层(称为Project I).

该项目I包含界面ICar.

其他项目A,BC参考I.

你的Car类应该实现这个接口,看起来像这样:

public class Car : ICar
{
    // ... some great Code
}
Run Code Online (Sandbox Code Playgroud)

在Project中,B您的功能将是:

public List<ICar> GetCars()
{
   var myCars = new List<Car>();

   // ... some really special magic

   return (List<ICar>)myCars;
}
Run Code Online (Sandbox Code Playgroud)

现在你的代码,在项目中C可以像这样使用这个函数:

List<ICar> cars = B.GetCars();
Run Code Online (Sandbox Code Playgroud)

为什么使用接口层?

因为那样你将在代码中获得更多的可操作性.这非常适合使用依赖注入单元测试.它将帮助您在某些情况下替换部分实现,例如在单元测试期间提供Mock对象.


设计方法

为了防止spaghetti code我建议查找Jeffery Palermo的洋葱架构概念.

在SO上有一些很好的问题: