1. 程式人生 > >NET Core 三層架構,依賴注入

NET Core 三層架構,依賴注入

        NET Core搭建三層架構,每層之間使用依賴注入獲取例項

        專案結構如下

      

 常用的三層,Web-BLL-DLL

       BLL與DAL層分為Interface裡邊是提供介面,Implments提供實現類,DIRegister提供依賴注入的對映關係

    一:新建好三層新增好每層之間的依賴

 專案之間的依賴還是像以前一樣,右鍵新增引用即可

     vs2017新增引用的是可能會報錯:找不到 Microsoft.VisualStudio.Shell.Interop.IVsReferenceManager 服務的例項

     解決方法:http://blog.csdn.net/aojiancc2/article/details/74972566

      DeptMangerBLL.cs程式碼:

裡邊通過建構函式注入呼叫DAL層的方法

 public class DeptMangerBLL: IDeptMangerBLL
    {
        private IDeptMangerDAL _idl;

        //建構函式注入
        public DeptMangerBLL(IDeptMangerDAL idl)
        {
            _idl = idl;
        }

        public string GetDName()
        {
            string dname = _idl.GetDName();

            return dname;
        }
    }

     

     二:每層之間配置好依賴注入的對映關係

BLL層       

 //BLL層的依賴注入
    public class BLLDIRegister
    {
        public void DIRegister_DAL(IServiceCollection services)
        {
            //配置一個依賴注入對映關係
            services.AddTransient(typeof(IDeptMangerBLL), typeof(DeptMangerBLL));

            //註冊DAL層的依賴注入
            DALDIRegister sdr = new DALDIRegister();
            sdr.DIRegister_DAL(services);
        }
    }

DAL層      

  //DAL層的依賴注入
    public class DALDIRegister
    {
        public void DIRegister_DAL(IServiceCollection services)
        {
            services.AddTransient(typeof(IDeptMangerDAL), typeof(DeptMangerDAL));
        }
    }

   注意在.NET Core類庫中沒有引用依賴注入的類庫:Microsoft.Extensions.DependencyInjection

           根本就獲取不到IServiceCollection

           所以需要新增Microsoft.Extensions.DependencyInjection的引用,可以右鍵管理Nuget程式包然後搜尋

           新增依賴

            也可以在.csproj中配置依賴Nuget會自動下載,配置如下:

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" />
  </ItemGroup>

      三在Startup.cs的ConfigureServices中新增各層的依賴注入配置

   public void ConfigureServices(IServiceCollection services)
        {

            //註冊BLL層的依賴注入配置
            BLLDIRegister sdr = new BLLDIRegister();
            sdr.DIRegister_DAL(services);

            services.AddMvc();
        }

配置好後controller中就可以很方便的使用中BLL的類了

 public class HomeController : Controller
    {
          
        private IDeptMangerBLL _id;

        //建構函式注入
        public HomeController(IDeptMangerBLL id)
        {
            _id = id;
        }

        public IActionResult Index()
        {
            //呼叫介面中的方法
            string dname = _id.GetDName();       

            return View();
        }

    }