繁体   English   中英

在C#控制台应用程序中添加参考错误

[英]Add reference Error in c# console app

我正在使用VS2010在C#中创建控制台应用程序。 它基于三层体系结构,包含三层

  • 用户界面
  • PMS.DAL
  • PMS.BL

为了删除PMS.DAL和PMS.BL之间的循环依赖关系,我添加了一个额外的层PMS.Service。

  1. 我创建了一个Vehicle在PMS.BL类,它实现接口IVehicle从PMS.Service。
  2. 我在DAL和BL中都添加了PMS.Service的引用。
  3. 现在,UI调用BL的Vehicle类的AddNewVehicle()方法,该方法实现了IVehicle
  4. BL在PMS.DAL中调用AddNewVehicle(IVehicle obj)方法...

一切正常,但在构建时,编译器表示要在PMS.UI中添加对PMS.Service的引用。

PMS.UI没有实现PMS.Service的任何接口,而是调用实现IVehicle的PMS.BL的Vehicle类的AddNewVehicle AddNewVehicle()方法。

仅当PMS.UI创建实现IVehicle存在的IVehicle的Vehicle Class of PMS.BL的实例时,才有必要向PMS.UI添加对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();
    }
}

具有给定的详细信息(无代码)。 这是我的理解。

PMS.Service (IVehicle.cs)
PMS.BL (Vehicle : IVehicle)

在这种情况下,如果要公开Vehicle,则还必须添加对PMS.Service的引用。 无论如何,在服务实现中使用模型接口/联系人看起来并不正确。 我宁愿考虑创建PMS.Contracts并在那里拥有我的模型/服务合同。

希望能有所帮助。

我认为您有体系结构问题。 基本上,如果您位于三层,这是个好方法:

IHM => BLL => DAL
Core

核心是一个包含工具功能(格式日期,编号等)和您的界面的项目。

依赖项:IHM参考BLL / BLL参考DAL。 所有这些都参考Core。 核心没有依赖性。

我像界面一样的初学者。 这是我必须选择的方式:

4个项目:

  1. 核心
  2. BLL(违约DAL-核心)
  3. DAL(违约核心)
  4. IHM(违约BLL-核心)

在核心中:两件事:接口IVehicle和实现该类的类称为Vehicle

因为我们需要使用DAL,所以我不知道如何不使用Core.Vehicle。 抽象类不好,因为如果DAL需要返回“ IVehicule”对象,则需要实现一个对象,而不能实现Abstract或Interface。

在BLL中:两个对象:实现Core.Vehicule的Car和Truck

在DAL中:一个对象:具有返回Core.Vehicule的方法的车辆

在IHM中:BLL.Car的调用

它在做...

编辑:我已经发布了一个像您一样的问题: POO和接口(在C#中)

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM