MVC接口的使用之自動創建實例化(一)學習

EFDAL層

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.IDAL;
using Dulei.Model;


namespace Dulei.DAL
{
    public class UserInfoEFDal:IUserInfoDal        繼承IUserInfoDal接口

    {
        public UserInfo ADD(UserInfo userInfo)      使用IUserInfoDal實現接口

        {
            DataModelContainer db = new DataModelContainer();
            db.UserInfo.Add(userInfo);
            db.SaveChanges();
            return userInfo;
        }
    }
}


AdoNetDal層


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.IDAL;

namespace Dulei.AdoNetDAL
{
    public class UserInfoAdoNetDal:IUserInfoDal       繼承IUserInfoDal接口

    {
        public Model.UserInfo ADD(Model.UserInfo userInfo)       使用IUserInfoDal實現接口

        {
            throw new NotImplementedException();
        }

    }
}



DAL層實現自動實例創建

1、建立接口層IDAL

2、IDal層創建了UserInfo實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.Model;

namespace Dulei.IDAL
{

        public interface IUserInfoDal
        {
            UserInfo ADD(UserInfo userInfo);
        }
}

BLL層調用接口實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.AdoNetDAL;
using Dulei.DAL;
using Dulei.IDAL;
using Dulei.Model;

namespace Dulei.BLL
{
    public class UserInfoService
    {
        IDAL.IUserInfoDal userInfoDal =new UserInfoEFDal();                          IDAL.IUserInfoDal實例。只需要改new UserInfoEFDal();new IUserInfoDal();就可以更換數據DAL層

        public UserInfo AddUserInfo(UserInfo userInfo)
        {
            return userInfoDal.ADD(userInfo);
        }
    }
}

總結:更換數據層時就可以不用在去更改業務層代碼了。只需要更改new的實例。

如果要改數據庫還需要改new實例 


二、new實例

        上面已經對實例進行了接口的改良。下面對NEW 實例就行改良。

DalFactory類庫增加類名爲DALFactory

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.DAL;

namespace Dulei.DalFactory
{
    public class DALFactory
    {
        public static IDAL.IUserInfoDal GetUserInfoDal()
        {
            return new UserInfoEFDal();
        }
    }



更改BLL層NEW的實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.AdoNetDAL;
using Dulei.DAL;
using Dulei.IDAL;
using Dulei.Model;

namespace Dulei.BLL
{
    public class UserInfoService
    {
        private IDAL.IUserInfoDal userInfoDal = DalFactory.GetUserInfoDal();          通過DalFactory.GetUserInfoDal();拿到NEW的新實例 


        public UserInfo AddUserInfo(UserInfo userInfo)
        {
            return userInfoDal.ADD(userInfo);     以後更換DAL時只需要改return後面的代碼,更換ado的數據庫UserInfoAdoNetDal

        }
    }
}

雖然看上去簡單,但是這裏體現了面向對向的恩想。

新的問題要更數據庫還要更改UserInfoDAL


傳程序集進來。

namespace CZBK.OADemo.DalFactory
{
    public class DALSimpleFactory
    {
        public static IDAL.IUserInfoDal GetUserInfoDal()
        {
            //如果直接new 的話那麼必須  改代碼的才能切換不同的數據庫訪問層。
            //非常希望能做到:只改配置就能夠創建出實例出來。也就是改變數據庫訪問層的實現。
            //return GetInstences("CZBK.OADemo.DAL", "CZBK.OADemo.DAL." + "UserInfoDal") as IUserInfoDal;
            return   new UserInfoAdoNetDal();
        }

        public static Object GetInstences(string assemblyName, string typeName)
        {
            return Assembly.Load(assemblyName).CreateInstance(typeName);
            //return null;
        }
    }
}
同過程序集來判斷程序集的類型名字。

在去webconfig下

  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="AssemblyName" value="Dulei.Dal" />
    <add key="NameSpace" value="Dulei.Dal" />
  </appSettings>

增加了

    <add key="AssemblyName" value="Dulei.Dal" />
    <add key="NameSpace" value="Dulei.Dal" />

通過更改appsettings來修改使用的數據庫


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章