我正在使用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')。 –