系列目录

前言:

有时候我们系统需要开放数据给手机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,数据和脚本在源码下载查看)

可以顺利访问到数据库

ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入

    系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/rel ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

随机推荐

  1. 从零自学Java-8.创建第一个对象

    1.创建对象:2.使用属性描述对象:3.确定对象的行为:4.合并对象:5.从其他对象继承:6.转换对象和其他类型的信息. 程序NewRoot2:计算输入数的算数平方根并输出 package com.j ...

  2. List基础操作

    /** * List基础操作 * Created by zhen on 2018/11/14. */ object ListDemo { def main(args: Array[String]) { ...

  3. Python拆分DataFrame

    # 在Python中可以根据某列的具体内容来拆分数据,保存成多个DataFrame! # 代码如下: ycsj = pfsj[pfsj['备注'].isin(['1'])] # 拆分数据: 结果:

  4. Asp.Net WebApi Get请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Get请求整理 一.总结 1.Asp.Net WebApi默认不支持Get请求,需要在Action方法上指定[HttpGet], 除非Action ...

  5. Linux 小知识翻译 - 「Linux」和病毒

    据说,「Linux」系统上的病毒要远远少于Windows系统上病毒.从2种系统的普及度来看,这是很显然的, 「Linux」的使用人群很少,所以「Linux」上的病毒的扩散时,受害的范围也不大. 但是, ...

  6. 17秋 软件工程 第六次作业 Beta冲刺 总结博客

    题目:团队作业--Beta冲刺 17秋 软件工程 第六次作业 Beta冲刺 总结博客 Beta冲刺过程中各个成员的贡献百分比 世强:15.5% 陈翔:14.5% 树民:12.0% 媛媛:14.0% 港 ...

  7. Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目

    Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...

  8. php数据库单例模式理解

    单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符 ...

  9. WPFのBorder的用法

    border介绍: 下面是StackPanel中,一个简单的,具有轻微圆角的边框,围绕在一组按钮外面: <Border Margin="5" Padding="5& ...

  10. oc kvc的模式:匹配搜索模式(模式匹配)、装包解包

    按照一定规则使用匹配模式在目标空间进行搜索,然后执行相应操作: 运行时系统将kvc的运行机制解释为模式匹配,将值的兼容性问题解释为装包解包问题 一.模式匹配 The default implement ...