300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入

ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入

时间:2019-03-15 03:40:52

相关推荐

ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入

系列目录

前言:

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

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

不明白什么是IOC,DI,控制反转的自行百度补脑,否则无法阅读本文

其实这也是一次技术上的记录,因为找遍大百度居然没有可以用的利用Unity注入的WebApi!感谢随风朋友的提醒。才能完成本节的指导

为了更好的理解,请下载代码

链接:/s/1QjKHPbyNELrrZhuM3JD0dA 密码:lv1f

(这是一个已经包含了Unity注入的普通MVC例子)包含4个需要被注入的类库,BLL,IBLL,DAL,IDAL

开发工具:VS+SQL(数据库不是必要)

开始:

1.新建 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=".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,数据和脚本在源码下载查看)

可以顺利访问到数据库

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。