• 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,数据和脚本在源码下载查看)

    可以顺利访问到数据库

  • 相关阅读:
    Objective-C代码规范
    Http中Get/Post请求区别
    使用Vitamio打造自己的Android万能播放器
    Vitamio
    图片瀑布流
    TCP与UDP
    SQLite基本操作总结
    IOS文件操作的两种方式:NSFileManager操作和流操作
    JSON和XML
    一些iOS常用的第三方库和控件及第三方框架还有动画
  • 原文地址:https://www.cnblogs.com/ymnets/p/5648459.html
Copyright © 2020-2023  润新知