zoukankan      html  css  js  c++  java
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入

    系列目录

    前言:

    有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选

    本节记录Asp.net MVC WebApi怎么利用Unity注入。系列开头已经讲解了普通的Asp.net MVC如何用Unity注入容器

    不明白什么是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支持的。

    安装Unity.WebApi会自动安装很多依赖项:Unity (≥ 4.0.1),CommonServiceLocator,Microsoft.AspNet.WebApi.Core,Microsoft.AspNet.WebApi.Client ,Newtonsoft.Json 

    网络不好会很漫长,需要难心等待。或者到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,数据和脚本在源码下载查看)

    可以顺利访问到数据库

  • 相关阅读:
    TSQL Beginners Challenge 1
    SQL拾遗
    简易实体生成方式
    CTE-递归[2]
    编号处理
    行列转换/横转竖
    OUTPUT、Merge语句的使用
    关于SQL IO的一些资料
    对左值(lvalue)和右值(rvalue)的两种理解方式
    跨平台判断64位和32位开发的一些宏定义
  • 原文地址:https://www.cnblogs.com/ymnets/p/5648459.html
Copyright © 2011-2022 走看看