ASP.NET MVC5+EF6+EasyUI 後臺管理系統(63)-WebApi與Unity注入

系列目錄

前言:

有時候咱們系統須要開放數據給手機App端或其餘移動設備,不得不說Asp.net WebApi是目前首選html

本節記錄Asp.net MVC WebApi怎麼利用Unity注入。系列開頭已經講解了普通的Asp.net MVC如何用Unity注入容器jquery

不明白什麼是IOC,DI,控制反轉的自行百度補腦,不然沒法閱讀本文數據庫

其實這也是一次技術上的記錄,由於找遍大百度竟然沒有能夠用的利用Unity注入的WebApi!感謝隨風朋友的提醒。才能完成本節的指導網絡

爲了更好的理解,請下載代碼工具

連接:https://pan.baidu.com/s/1QjKHPbyNELrrZhuM3JD0dA 密碼:lv1f開發工具

(這是一個已經包含了Unity注入的普通MVC例子)包含4個須要被注入的類庫,BLL,IBLL,DAL,IDAL測試

開發工具:VS2013+SQL2012(數據庫不是必要)

開始:

1.新建Asp.Net MVC WebApi項目

2.安裝Unity.WebApi程序包解析一下,這裏有依賴項:Unity >=4.0.1

(咱們以前的注入就只安裝了Unity)因此Unity.WebApi是須要Unity4.0.1支持的。spa

安裝Unity.WebApi會自動安裝不少依賴項:Unity (≥ 4.0.1),CommonServiceLocator,Microsoft.AspNet.WebApi.Core,Microsoft.AspNet.WebApi.Client ,Newtonsoft.Json .net

網絡很差會很漫長,須要難心等待。或者到nuget官方下載離線的調試

3.Apps.Core也須要一樣安裝Untiy.WebApi

安裝完成後在Apps.WebApi下將自動多出一個文件

添加代碼到UnityConfig.cs

using Apps.Core;
using Microsoft.Practices.Unity;
using System.Web.Http;
using Unity.WebApi;

namespace Apps.WebApi
{
    public static class UnityConfig
    {
        public static void RegisterComponents()
        {
            UsingUnityContainer.Init();
            DependencyRegisterType.Container_Sys(ref UsingUnityContainer._container);
            GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(UsingUnityContainer._container);
           
        }
    }
}

最後添加UnityConfig.RegisterComponents();到Global.asax 。必須在全局文件添加,本注入是運行時注入

using Apps.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace Apps.WebApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            UnityConfig.RegisterComponents();
        }
    }
}

4.修復錯誤

運行以後會出現錯誤

這是因爲Web.config節點缺少解析形成。

須要添加如下節點

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

運行以後就沒有問題了。

在Home/Index.cshtml編寫一個簡單的請求的測試一下

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function(){
    $.get("/Api/Values/5",function(data){
         alert(data);
        });
    });
</script>

5.運行並調試

添加控制反轉代碼到ValuesController

  [Dependency]
   public ISysPersonBLL m_BLL { get; set; }

這樣咱們就能夠用m_BLL來訪問BLL的方法,達到控制反轉的目的

若是斷點執行到調用處,那麼恭喜你,注入順利成功,能夠調用了(配圖爲返回數據庫第一條數據的ID,數據和腳本在源碼下載查看)

能夠順利訪問到數據庫

相關文章
相關標籤/搜索