如何使用C#.net(VS2012)访问另一个项目中的类(但在同一解决方案中)

时间:2013-10-02 18:13:40

标签: c# .net winforms visual-studio-2012

我第一次使用三层架构,我在一个解决方案中创建了三个项目,一个项目名为 BLL ,第二个名为 DAL ,第三个一个是名称模型,我在模型中创建了接口,现在想要在BLL中创建业务逻辑,并希望将它连接到我已连接我的数据库的DAL。

为了这个目的,我添加了每个项目的参考资料,比如我在模型中添加了BLL的参考资料,并在DAL中添加了BLL的参考资料。

现在,我已经创建了一个类是DAL,其中我已经连接了我的数据库并且已经在模型中创建了一个Windows窗体,

现在我的问题是

1)如何在模型

中访问BLL和BLL中的DAL类

2)我将通过BLL创建(在BLL中)访问数据库的逻辑

我连接数据库的类是

DB.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient();

namespace WindowsFormsApplication3
{
    class DB
    {
        public void fnc_ConnectoToDB(ref SqlConnection cn)
        {
            string strConnectionString = null;

            strConnectionString = @"Data Source=AHSANMUGHAL;Initial Catalog=SurveyBuilder;User ID=sa;Password=ahsan";

            cn = new SqlConnection();
            cn.ConnectionString = strConnectionString;
            cn.Open();      
        }

        public void fnc_CloseCn(ref SqlConnection cn)
        {
            if (cn.State == ConnectionState.Open == true)
            {
                cn.Close();
            }
        }

    }
}

我知道这有点让人困惑,但我希望你们能理解它并尽快解决问题

3 个答案:

答案 0 :(得分:2)

尝试使用像ninject这样的依赖注入框架。

以下是一个例子:

您的实施:

public class Samurai {
    public IWeapon Weapon { get; private set; }
    public Samurai(IWeapon weapon) 
    {
        this.Weapon = weapon;
    }
}

一个给武士提供武器的模块:

public class WarriorModule : NinjectModule
{
    public override void Load() 
    {
        this.Bind<IWeapon>().To<Sword>();
    }
}

这很简单。

答案 1 :(得分:2)

首先,你需要公开你的课程。

公共类数据库

答案 2 :(得分:0)

以下是基于类的依赖注入的简单示例。

使用任何IoC(控制反转)容器,这些容器可以使您的实例更易于管理。如果你最初避免使用IOC容器的魔力,我认为更容易概念化。当你向上移动时,它也会让你很高兴。

Ninject是另一个答案中提到的IoC containerUnity是另一个答案。

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Model : Form
    {
        public Model()
        {
            InitializeComponent();
            var bll = new BLL(new DAL());
            bll.WriteToDatabase("mydbvalue");
        }
    }

    public interface IBll
    {
        void WriteToDatabase(string value);
    }
    public class BLL: IBll
    {
        private IDal _dataLayer;
        public BLL(IDal dataLayer)
        {
            _dataLayer = dataLayer;
        }

        public void WriteToDatabase(string value)
        {
            _dataLayer.WriteToDatabase(value);
        }
    }

    public interface IDal
    {
        void WriteToDatabase(string value);
    }
    public class DAL:IDal
    {
        public void WriteToDatabase(string value)
        {
            fnc_ConnectToDB();
        }
    }
}