我正在使用VS2010在C#中创建控制台应用程序。它是基于在3层结构的含三层在c#控制台应用程序中添加引用错误
- PMS.UI
- PMS.DAL
- PMS.BL
要删除PMS.DAL和PMS之间循环依赖 .BL我添加了一个额外的层PMS.Service。
- 我创建在PMS.BL一个
Vehicle
类从PMS.Service实现接口IVehicle
。 - 我在DAL和BL中都添加了PMS.Service的参考。
- 现在UI调用方法的
AddNewVehicle()
Vehicle
类BL的,它实现IVehicle
- BL调用PMS.DAL VehicleDao的
AddNewVehicle(IVehicle obj)
方法...
所有工作正常,但在构建编译器的时候说要加PMS.UI中的PMS.Service参考。
PMS.UI没有实现PMS.Service的任何接口,但调用AddNewVehicle()
PMS.BL的Vehicle类的方法实现IVehicle
。
是否有必要添加PMS.Service的参考,只有当它创建Vehicle
类PMS.BL的一个实现IVehicle
目前在PMS.Service的实例PMS.UI ..
请帮助我,我是新在c#中使用接口...
谢谢你的答案,但我仍然困惑。我将在这里介绍我的代码。我已经将所有四层作为不同的c sharp类库(不同的层)添加。
1)PMS.UI(Added reference of PMS.BL)
Program.cs
using System;
using PMS.BL;
namespace PMS.APP
{
class Program
{
static void Main()
{
var vBo = new VehicleBo();//Compiler Says Add reference of PMS.Service here.Why is it necessary to add Reference of it??
vbo.VehicleNumber = "BA1PA 1212";
vbo.VehicleType = "Bike";
vbo.SaveNewVehicle();
}
}
}
2)PMS.BL(Added reference of PMS.DAL and PMS.Service)
VehicleBO.cs
using PMS.DAL;
using PMS.Service;
namespace PMS.BL
{
public class VehicleBo : IVehicle
{
public string VehicleNumber { get; set; }
public string VehicleType { get; set; }
public void SaveNewVehicle()
{
var vDao = new VehicleDao();
vDao.SaveNewVehicle(this);
}
}
}
3)PMS.DAL(Added reference of PMS.Service)
using PMS.Service;
namespace PMS.DAL
{
public class VehicleDao
{
public void SaveNewVehicle(IVehicle obj)
{
//code to insert in database
}
}
}
4)PMS.Service
IVehicle.cs
namespace PMS.Service
{
public interface IVehicle
{
string VehicleNumber { get; set; }
string VehicleType { get; set; }
void SaveNewVehicle();
}
}
请在PMS.UI中调用'Vehicle'类的'AddNewVehicle()'方法的地方添加代码段?无论您是通过“Vehicle”类还是“IVehicle”接口实例来调用它,都至关重要。 –
我已在Andrii Kalytiiuk上面添加代码请检查它.. – rriwaj
您需要在PMC.UI中为PMS.Service提供参考,因为PMS.UI引用了PMS.BL,它定义了像'SaveNewVehicle(IVehicle obj)'这样的函数,其中定义了IVehicle在PMS.Service中。因此,为了确保所有来自PMS.BL的调用在PMS.UI中都是有效的 - 您需要在PMS.UI中与PMS.BL一起引用PMS.Service(否则调用'SaveNewVehicle(IVehicle obj)'将无效PMS.UI将不知道任何关于'IVehicle')。 –