Я создаю консольное приложение на C#, используя VS2010. Он основан в 3-Layer Архитектура, содержащий три слояДобавить ссылку Ошибка в приложении C# console
- PMS.UI
- PMS.DAL
- PMS.BL
Чтобы удалить циклическую зависимость между PMS.DAL и PMS .BL Я добавил дополнительный слой PMS.Service.
- Я создал
Vehicle
класс в PMS.BL, который реализует интерфейсIVehicle
от PMS.Service. - Я добавил ссылку на PMS.Service как в DAL, так и в BL.
- Теперь UI вызывает
AddNewVehicle()
методVehicle
класса BL, который реализуетIVehicle
- BL вызывает
AddNewVehicle(IVehicle obj)
метод VehicleDao в PMS.DAL ...
Все работает нормально, но во время сборки компилятора говорит, чтобы добавить ссылка на PMS.Service в PMS.UI.
PMS.UI не реализует никакого интерфейса PMS.Service, но называет AddNewVehicle()
метод класса транспортного средства PMS.BL, который реализует IVehicle
.
Нужно ли добавить ссылку на PMS.Service в PMS.UI только если он создает экземпляр класса Vehicle
PMS.BL, который реализует IVehicle
присутствующую в PMS.Service ..
Пожалуйста, помогите мне, я новый использовать интерфейс в C# ...
Спасибо, ребята, за ответы, но я все еще смущен. Я представлю свой код здесь. Я добавил все четыре слоя как другую c-классную библиотеку классов (разные слои).
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();
}
}
Пожалуйста, добавьте фрагменты кода, где вы называете метод 'AddNewVehicle()' класса Vehicle' в PMS.UI? Очень важно, называете ли вы его на примере класса «Vehicle» или «IVehicle». –
Я добавил код выше Andrii Kalytiiuk, пожалуйста, просмотрите его. – rriwaj
Вам нужны ссылки в PMC.UI для PMS.Service, потому что PMS.UI ссылается на PMS.BL, который определяет такие функции, как 'SaveNewVehicle (IVehicle obj)' где 'IVehicle' определен в PMS.Service. Таким образом, чтобы все вызовы из PMS.BL были действительны в PMS.UI - вам нужна PMS.Service, на которую нужно ссылаться в PMS.UI вместе с PMS.BL (иначе вызов 'SaveNewVehicle (IVehicle obj)' будет недействительным как PMS.UI ничего не знает о 'IVehicle'. –