<!DOCTYPE html> | |
<html lang="zh-cn"> | |
<head> | |
<meta charset="utf-8"/> | |
<meta name="viewport" content="width=device-width, initial-scale=1" /> | |
<title>.Net IOC框架入门之一 Unity - 心存善念 - 博客园</title> | |
<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=-hy83QNg62d4qYibixJzxMJkbf1P9fTBlqv7SK5zVL01"/> | |
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside.css?v=RRjf6pEarGnbXZ86qxNycPfQivwSKWRa4heYLB15rVE1"/> | |
<link type="text/css" rel="stylesheet" href="/blog/customcss/108952.css?v=XK2kFap83aYF5sezr1agPqyiauU%3d"/> | |
<link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside-mobile.css?v=7KLBb8V0rc2yA8fbmGaHDyGb3rUQhG3DSX2DksEt9PU1"/> | |
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/xcsn/rss"/> | |
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/xcsn/rsd.xml"/> | |
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/xcsn/wlwmanifest.xml"/> | |
<script src="//common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script> | |
<script type="text/javascript">var currentBlogApp = 'xcsn', cb_enable_mathjax=false;var isLogined=true;</script> | |
<script src="/bundles/blog-common.js?v=d16NGD79qD3qnJt25hXDZ2sGoojamz2W5Rl4vT0CGVg1" type="text/javascript"></script> | |
</head> | |
<body> | |
<a name="top"></a> | |
<!--done--> | |
<div id="home"> | |
<div id="header"> | |
<div id="blogTitle"> | |
<a id="lnkBlogLogo" href="http://www.cnblogs.com/xcsn/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主页" /></a> | |
<!--done--> | |
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xcsn/">心存善念</a></h1> | |
<h2><strong style='color:#ddd'>穷且益坚,不坠青云之志。</strong></h2> | |
</div><!--end: blogTitle 博客的标题和副标题 --> | |
<div id="navigator"> | |
<ul id="navList"> | |
<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li> | |
<li><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/xcsn/">首页</a></li> | |
<li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li> | |
<li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/%E5%BF%83%E5%AD%98%E5%96%84%E5%BF%B5">联系</a></li> | |
<li><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/xcsn/rss">订阅</a> | |
<!--<a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/xcsn/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="订阅" /></a>--></li> | |
<li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li> | |
</ul> | |
<div class="blogStats"> | |
<div id="blog_stats"> | |
<span id="stats_post_count">随笔 - 610 </span> | |
<span id="stats_article_count">文章 - 1 </span> | |
<span id="stats-comment_count">评论 - 107</span> | |
</div> | |
</div><!--end: blogStats --> | |
</div><!--end: navigator 博客导航栏 --> | |
</div><!--end: header 头部 --> | |
<div id="main"> | |
<div id="mainContent"> | |
<div class="forFlow"> | |
<div id="post_detail"> | |
<!--done--> | |
<div id="topics"> | |
<div class = "post"> | |
<h1 class = "postTitle"> | |
<a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/xcsn/p/7395900.html">.Net IOC框架入门之一 Unity</a> | |
</h1> | |
<div class="clear"></div> | |
<div class="postBody"> | |
<div id="cnblogs_post_body" class="blogpost-body"><h2>一、概述</h2> | |
<p> IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。<br /> 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。<br /> 依赖注入: 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。</p> | |
<p> Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器;</p> | |
<p> 它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection)。</p> | |
<p> 现在Unity最新的版本的4.0版,可以在微软的开源站点 https://github.com/unitycontainer/unity 下载最新的发布版本。</p> | |
<p> 通过使用Unity,我们能轻松构建松耦合结构的程序,从而让整个程序框架变得清晰和易于维护。</p> | |
<h2>二、简单示例</h2> | |
<p><span style="line-height: 1.5;"> 创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目.</span></p> | |
<h3><span style="line-height: 1.5;">Business类库</span></h3> | |
<p> 类库代码</p> | |
<p> a、Business类库定义一个接口IUserService</p> | |
<div class="cnblogs_code"> | |
<pre>namespace<span> Business | |
{ | |
/// <summary> | |
/// 显示信息 | |
/// </summary> | |
public interface<span> IUserService | |
{ | |
string Display(string<span> mes); | |
} | |
}</span></span></span></pre> | |
</div> | |
<p> b、Business类库实现接口</p> | |
<div class="cnblogs_code"> | |
<pre>namespace<span> Business | |
{ | |
public class<span> UserService : IUserService | |
{ | |
/// <summary> | |
/// 显示信息 | |
/// </summary> | |
/// <param name="mes"></param> | |
public string Display(string<span> mes) | |
{ | |
return "I say:" +<span> mes; | |
} | |
} | |
}</span></span></span></span></pre> | |
<p><span> </span></p> | |
</div> | |
<h3><span style="line-height: 1.5;">示例一</span></h3> | |
<p><span style="line-height: 1.5;"> 在Web.Mvc项目通过nuget添加unity.mvc5 (1.2.3)</span></p> | |
<p><span style="line-height: 1.5;"> 1.注册服务</span></p> | |
<p><span style="line-height: 1.5;"> 注册依赖使用依赖注入生效,</span>在Web.Mvc项目的Global.asax进行注册 </p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Optimization; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Routing; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5; | |
</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc | |
{ | |
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MvcApplication : System.Web.HttpApplication | |
{ | |
</span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start() | |
{ | |
AreaRegistration.RegisterAllAreas(); | |
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); | |
RouteConfig.RegisterRoutes(RouteTable.Routes); | |
BundleConfig.RegisterBundles(BundleTable.Bundles); | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">注入 Ioc</span> | |
<span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">this</span><span style="color: #000000;">.BuildUnityContainer(); | |
DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container)); | |
} | |
IUnityContainer BuildUnityContainer() | |
{ | |
</span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer(); | |
container.RegisterType</span><<span style="color: #ff0000;"><strong>IUserService</strong></span>, <span style="color: #ff0000;"><strong>UserService</strong></span>><span style="color: #000000;">(); | |
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container; | |
} | |
} | |
}</span></pre> | |
</div> | |
<p> 2.注入服务</p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc.Controllers | |
{ | |
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> HomeController : Controller | |
{ | |
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> IUserService userService; | |
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> HomeController(IUserService userService) | |
{ | |
</span><span style="color: #0000ff;">this</span>.userService =<span style="color: #000000;"> userService; | |
} | |
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ActionResult Index() | |
{ | |
ViewBag.Msg </span>= userService.Display(<span style="color: #800000;">"</span><span style="color: #800000;">hahaha</span><span style="color: #800000;">"</span><span style="color: #000000;">); | |
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> View(); | |
} | |
} | |
}</span></pre> | |
</div> | |
<p>e、在Index.cshtml找个地方写入@ViewBag.Msg 就可以,如</p> | |
<div class="cnblogs_code"> | |
<pre><h1>ASP.NET - @ViewBag.Msg</h1></pre> | |
</div> | |
<p>最后运行项目,实现效果</p> | |
<h4>ASP.NET - I say:hahaha</h4> | |
<h3>示例二</h3> | |
<p> 本示例为2017.12.08补充。</p> | |
<p> 创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目,在Web.Mvc项目通过nuget添加unity.mvc5 (1.3.0)</p> | |
<p> 命令:<strong>Install-Package Unity.Mvc5 -Version 1.3.0</strong></p> | |
<p><strong> </strong>安装后如图</p> | |
<p> <img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208151205202-990516951.png" alt="" /></p> | |
<p> 1. 调用注册组件</p> | |
<p> 在Global.asax.cs 的Application_Start 方法添加 UnityConfig.RegisterComponents() ,MVC会使用 Unity.Mvc5的 DependencyResolver去解析服务</p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start() | |
{ | |
AreaRegistration.RegisterAllAreas(); | |
UnityConfig.RegisterComponents();</span><span style="color: #008000;">//</span><span style="color: #008000;">在此处添加</span> | |
<span style="color: #000000;"> FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); | |
RouteConfig.RegisterRoutes(RouteTable.Routes); | |
BundleConfig.RegisterBundles(BundleTable.Bundles); | |
}</span></pre> | |
</div> | |
<p> 2.注册服务</p> | |
<p> 找到App_Start下的UnityConfig类,如下修改</p> | |
<div class="cnblogs_code"> | |
<pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UnityConfig | |
{ | |
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterComponents() | |
{ | |
</span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer(); | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">在这里使用container注册所有服务</span> | |
container.RegisterType<IUserService, UserService>();<span style="color: #008000;">//</span><span style="color: #008000;">自定义的服务</span> | |
<span style="color: #000000;"> | |
DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container)); | |
} | |
}</span></pre> | |
</div> | |
<p> 3.修改控制器Home和页面Index</p> | |
<p> </p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> HomeController : Controller | |
{ | |
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> IUserService userService; | |
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> HomeController(IUserService userService) | |
{ | |
</span><span style="color: #0000ff;">this</span>.userService =<span style="color: #000000;"> userService; | |
} | |
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ActionResult Index() | |
{ | |
ViewBag.Name </span>= userService.Display(<span style="color: #800000;">"</span><span style="color: #800000;">我是 UNITY 1.3.0</span><span style="color: #800000;">"</span><span style="color: #000000;">); | |
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> View(); | |
}</span></pre> | |
</div> | |
<p>页面代码</p> | |
<div class="cnblogs_code"> | |
<pre><div <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">jumbotron</span><span style="color: #800000;">"</span>> | |
<h1>Unity 入门</h1> | |
<p <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">lead</span><span style="color: #800000;">"</span>>@ViewBag.Name</p> | |
</div> | |
</pre> | |
</div> | |
<p>效果</p> | |
<p><img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208152208359-1020384596.png" alt="" /></p> | |
<p> </p> | |
<h2><span style="font-size: 1.5em; line-height: 1.5;">三、注册封装</span></h2> | |
<p>对示例一 的注册进行独立封装到BootStrapper中</p> | |
<p>c、注册依赖使用依赖注入生效</p> | |
<p>在Web.Mvc项目的Global.asax进行注册 </p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Optimization; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Routing; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5; | |
</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc | |
{ | |
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MvcApplication : System.Web.HttpApplication | |
{ | |
</span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start() | |
{ | |
AreaRegistration.RegisterAllAreas(); | |
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); | |
RouteConfig.RegisterRoutes(RouteTable.Routes); | |
BundleConfig.RegisterBundles(BundleTable.Bundles); | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">注入 Ioc </span> | |
<span style="color: #000000;"> BootStrapper.Initialise(); | |
} | |
} | |
}</span></pre> | |
</div> | |
<p>BootStrapper代码</p> | |
<div class="cnblogs_code"> | |
<pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Configuration; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity.Configuration; | |
</span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5; | |
</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc | |
{ | |
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> BootStrapper | |
{ | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> | |
<span style="color: #808080;">///</span><span style="color: #008000;"> 获取容器-注册依赖关系 | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> | |
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span> | |
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> IUnityContainer Initialise() | |
{ | |
</span><span style="color: #0000ff;">var</span> container =<span style="color: #000000;"> BulidUnityContainer(); | |
DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container)); | |
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container; | |
} | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> | |
<span style="color: #808080;">///</span><span style="color: #008000;"> 加载容器 | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> | |
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span> | |
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> IUnityContainer BulidUnityContainer() | |
{ | |
</span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer(); | |
RegisterTypes(container); | |
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container; | |
} | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> | |
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入 | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> | |
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></span> | |
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterTypes(IUnityContainer container) | |
{ | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">类型的配置容器注册</span> | |
container.RegisterType<IUserService, UserService><span style="color: #000000;">(); | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterType<IUserService, UserService>(new ContainerControlledLifetimeManager());</span><span style="color: #008000;">//</span><span style="color: #008000;">通过生命周期实现了单例模式 | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">已有对象实例的配置容器注册,也为单例 | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">UserService userService = new UserService(); | |
</span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterInstance<IUserService>(userService);</span> | |
<span style="color: #000000;"> | |
} | |
} | |
}</span></pre> | |
</div> | |
<h3 id="xishuai_h7">Unity注册配置</h3> | |
<p> 修改上面的方法,将注册放到配置文件中</p> | |
<p>1.方法修改</p> | |
<div class="cnblogs_code"> | |
<pre> <span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> | |
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入 | |
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> | |
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></span> | |
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterTypes(IUnityContainer container) | |
{ | |
</span><span style="color: #808080;">///</span><span style="color: #008000;">/依赖关系可以选择代码形式,也可以用配置文件的形式</span> | |
UnityConfigurationSection config =<span style="color: #000000;"> (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName); | |
config.Configure(container, </span><span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span><span style="color: #000000;">); | |
}</span></pre> | |
</div> | |
<pre><span>UnityConfigurationSection.SectionName为unity</span></pre> | |
<p>2.配置文件</p> | |
<p> 提示:自定义web.config节点来实现</p> | |
<div class="cnblogs_code"> | |
<pre><configuration> | |
<configSections> | |
<section name=<span style="color: #800000;">"</span><span style="color: #800000;">unity</span><span style="color: #800000;">"</span> type=<span style="color: #800000;">"</span><span style="color: #800000;">Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration</span><span style="color: #800000;">"</span>/> | |
<!-- 一般将unity节点放到文件末尾 --> | |
</configSections> | |
<unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> | |
<<span style="color: #0000ff;">namespace</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> | |
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> | |
<containers> | |
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">IUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">UserService</span><span style="color: #800000;">"</span>> | |
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> | |
</register> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">ILocalUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">LocalUserService</span><span style="color: #800000;">"</span>/> | |
</container> | |
</containers> | |
</unity> | |
</configuration></pre> | |
</div> | |
<p>或者为</p> | |
<p><strong>直接指定命名空间</strong></p> | |
<div class="cnblogs_code"> | |
<pre> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> | |
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> | |
<containers> | |
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.IUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.UserService</span><span style="color: #800000;">"</span>> | |
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> | |
</register> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.ILocalUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.LocalUserService</span><span style="color: #800000;">"</span>/> | |
</container> | |
</containers> | |
</unity></pre> | |
</div> | |
<p>或者为</p> | |
<p><strong>指定程序集名称</strong></p> | |
<div class="cnblogs_code"> | |
<pre> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> | |
<containers> | |
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.IUserService,Business</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.UserService,Business</span><span style="color: #800000;">"</span>> | |
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> | |
</register> | |
<register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.ILocalUserService,Business</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.LocalUserService,Business</span><span style="color: #800000;">"</span>/> | |
</container> | |
</containers> | |
</unity></pre> | |
</div> | |
<p> </p> | |
<p> 源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/IocDemo.rar</p> | |
<p> </p> | |
<p>参考网址:</p> | |
<p>http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html</p> | |
<p>https://www.lanhusoft.com/Article/108.html</p> | |
<p>http://blog.csdn.net/xingxing513234072/article/details/21176247</p> | |
<p>http://www.cnblogs.com/wwj1992/p/6728370.html</p> | |
<p>http://www.cnblogs.com/xishuai/p/3670292.html(推荐)</p> | |
<p> </p></div><div id="MySignature"></div> | |
<div class="clear"></div> | |
<div id="blog_post_info_block"> | |
<div id="BlogPostCategory"></div> | |
<div id="EntryTag"></div> | |
<div id="blog_post_info"> | |
</div> | |
<div class="clear"></div> | |
<div id="post_next_prev"></div> | |
</div> | |
</div> | |
<div class = "postDesc">posted @ <span id="post-date">2017-08-19 11:02</span> <a href='http://www.cnblogs.com/xcsn/'>心存善念</a> 阅读(<span id="post_view_count">...</span>) 评论(<span id="post_comment_count">...</span>) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7395900" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(7395900);return false;">收藏</a></div> | |
</div> | |
<script type="text/javascript">var allowComments=true,cb_blogId=108952,cb_entryId=7395900,cb_blogApp=currentBlogApp,cb_blogUserGuid='7388f513-af54-e111-aa3f-842b2b196315',cb_entryCreatedDate='2017/8/19 11:02:00';loadViewCount(cb_entryId);var cb_postType=1;</script> | |
</div><!--end: topics 文章、评论容器--> | |
</div><a name="!comments"></a><div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script> | |
<div id='comment_form' class='commentform'> | |
<a name='commentform'></a> | |
<div id='divCommentShow'></div> | |
<div id='comment_nav'><span id='span_refresh_tips'></span><a href='javascript:void(0);' onclick='return RefreshCommentList();' id='lnk_RefreshComments' runat='server' clientidmode='Static'>刷新评论</a><a href='#' onclick='return RefreshPage();'>刷新页面</a><a href='#top'>返回顶部</a></div> | |
<div id='comment_form_container'></div> | |
<div class='ad_text_commentbox' id='ad_text_under_commentbox'></div> | |
<div id='ad_t2'></div> | |
<div id='opt_under_post'></div> | |
<div id='cnblogs_c1' class='c_ad_block'></div> | |
<div id='under_post_news'></div> | |
<div id='cnblogs_c2' class='c_ad_block'></div> | |
<div id='under_post_kb'></div> | |
<div id='HistoryToday' class='c_ad_block'></div> | |
<script type='text/javascript'> | |
fixPostBody(); | |
setTimeout(function () { incrementViewCount(cb_entryId); }, 50); | |
deliverAdT2(); | |
deliverAdC1(); | |
deliverAdC2(); | |
loadNewsAndKb(); | |
loadBlogSignature(); | |
LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid); | |
GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType); | |
loadOptUnderPost(); | |
GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate); | |
</script> | |
</div> | |
</div><!--end: forFlow --> | |
</div><!--end: mainContent 主体内容容器--> | |
<div id="sideBar"> | |
<div id="sideBarMain"> | |
<!--done--> | |
<div class="newsItem"> | |
<h3 class="catListTitle">公告</h3> | |
<div id="blog-news"></div><script type="text/javascript">loadBlogNews();</script> | |
</div> | |
<div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script> | |
<div id="leftcontentcontainer"> | |
<div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script> | |
</div> | |
</div><!--end: sideBarMain --> | |
</div><!--end: sideBar 侧边栏容器 --> | |
<div class="clear"></div> | |
</div><!--end: main --> | |
<div class="clear"></div> | |
<div id="footer"> | |
<!--done--> | |
Copyright ©2018 心存善念 | |
</div><!--end: footer --> | |
</div><!--end: home 自定义的最大容器 --> | |
<!--PageEndHtml Block Begin--> | |
<script language="javascript" type="text/javascript"> | |
// 生成目录索引列表 | |
function GenerateContentList() | |
{ | |
var mainContent = $('#cnblogs_post_body'); | |
var h2_list = $('#cnblogs_post_body h2'); | |
if(mainContent.length < 1) | |
return; | |
if(h2_list.length>0) | |
{ | |
var content = ''; | |
content += '<div class="navCategory" id="navCategory">'; | |
content += '<span style="font-size:16px;color:#0000FF;padding-left:10px"><b>目录导航</b></span>'; | |
content += '<ul>'; | |
for(var i=0; i<h2_list.length; i++) | |
{ | |
var li2_anchor = '<a name="h2_' + i + '"></a>'; | |
$(h2_list[i]).before(li2_anchor); | |
var h3_list = $(h2_list[i]).nextAll("h3"); | |
var li3_content = ''; | |
for(var j=0; j<h3_list.length; j++) | |
{ | |
var tmp = $(h3_list[j]).prevAll('h2').first(); | |
if(!tmp.is(h2_list[i])) | |
break; | |
var li3_anchor = '<a name="h3_' + i + '_' + j + '"></a>'; | |
$(h3_list[j]).before(li3_anchor); | |
li3_content += '<li><a href="#h3_' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>'; | |
} | |
var li2_content = ''; | |
if(li3_content.length > 0) | |
li2_content = '<li><a href="#h2_' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>'; | |
else | |
li2_content = '<li><a href="#h2_' + i + '">' + $(h2_list[i]).text() + '</a></li>'; | |
content += li2_content; | |
} | |
content += '</ul>'; | |
content += '</div>'; | |
if($('#cnblogs_post_body').length != 0 ) | |
{ | |
$($('#cnblogs_post_body')[0]).prepend(content); | |
} | |
} | |
} | |
GenerateContentList(); | |
var shareTag = '<blockquote><p>作者:<a href="http://www.cnblogs.com/xcsn">心存善念</a><br>本文地址:<a href="'+ location.href +'" class="uri">'+ location.href +'</a><br>欢迎转载,请在明显位置给出出处及链接。</p></blockquote>'; | |
$("#cnblogs_post_body").append(shareTag); | |
$("#blog-news").before('<img src="https://s11.flagcounter.com/count2/gPa8/bg_4078C0/txt_ffffff/border_CCCCCC/columns_3/maxflags_12/viewers_0/labels_0/pageviews_0/flags_0/percent_0/" alt="Flag Counter" border="0">'); | |
</script> | |
<div style="display:none"> | |
<script> | |
var _hmt = _hmt || []; | |
(function() { | |
var hm = document.createElement("script"); | |
hm.src = "//hm.baidu.com/hm.js?aaea1994210cb8b6eefcdea7143a1ff1"; | |
var s = document.getElementsByTagName("script")[0]; | |
s.parentNode.insertBefore(hm, s); | |
})(); | |
//$("#cnblogs_post_body").append('<p style="border:1px dashed #ddd;padding:5px;"><span style="color:green;font-size:14px;"><strong> 微信扫一扫,谢谢打赏</strong></span><br><img width=220 src="https://images.cnblogs.com/cnblogs_com/xcsn/917826/o_weixin_pic.jpg"></p>'); | |
//$(".day .dayTitle:first").before('<a href="http://tb.xmlv.cn/" target="_blank"><img src="http://tb.xmlv.cn/ad/ad1.png" width = "100%"/></a>'); | |
$(".day .dayTitle:first").before('<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=eni2075d&utm_source=eni2075d" target="_blank"><img src="http://static.xmlv.cn/yundashi.png" width = "100%"/></a>'); | |
</script> | |
</div> | |
<!--PageEndHtml Block End--> | |
</body> | |
</html> | |
unity 转载
猜你喜欢
转载自www.cnblogs.com/mushaofeng/p/9153987.html
今日推荐
周排行