C#实例 Unity依赖注入使用
Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入。Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问 题。构建一个成功应用程序的关键是实现非常松散的耦合设计。下面介绍一下c#中使用unity的方法(我是以webapi项目为例,但本例中并没有针对 webapi做特殊处理)
1.新建一个mvc4 webapi项目,下面的例子只用到get方法
2.用nuget安装unity,如图
3.新建一个接口类,以及继承该接口的两个类
直接在api/values的get中尝试简单实现unity
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<IBook, BBook>();
IBook a = container.Resolve<IBook>();
var strResult = a.Write();
return strResult;
}
然后在浏览器中查看,页面显示的返回值,是BBook的
如果container.RegisterType<IBook, BBook>();中的BBook改为ABook,返回值就是ABook的内容
config中代码如下
在configSections中加入
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
在configuration中加入
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="testunity.Models.IBook,testunity" mapTo="testunity.Models.ABook, testunity" />
</container>
</unity>
注意 type="testunity.Models.IBook,testunity" mapTo="testunity.Models.ABook, testunity"
testunity.Models.IBook是命名空间加类名
testunity是程序集的名称
然后cs的代码改成
using (IUnityContainer container = new UnityContainer())
{
UnityConfigurationSection configuration = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
configuration.Configure(container);
IBook a = container.Resolve<IBook>();
var strResult = a.Write();
return strResult;
}
在浏览器中可以看到返回结果对应的是config中register的那个类
每次调用都要写IUnityContainer container = new UnityContainer()显然不是好办法
那就把container封装到一个单列类中
简单实现如下
public class ServiceLocator:IServiceProvider
{
private readonly IUnityContainer _container;
private static readonly ServiceLocator instance = new ServiceLocator();
private ServiceLocator()
{
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
_container = new UnityContainer();
section.Configure(_container);
}
public static ServiceLocator Instance
{
get { return instance; }
}
public object GetService(Type serviceType)
{
return _container.Resolve(serviceType);
}
public T GetService<T>()
{
return _container.Resolve<T>();
}
}
cs代码修改如下
IBook a = ServiceLocator.Instance.GetService<IBook>();
var strResult = a.Write();
return strResult;
C#实例 Unity依赖注入使用的更多相关文章
- Unity 依赖注入之二
1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...
- Unity依赖注入使用详解
写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...
- WPF PRISM开发入门二(Unity依赖注入容器使用)
这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点 ...
- C# Unity依赖注入
简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...
- Unity 依赖注入
关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...
- 使用Microsoft.Practices.Unity 依赖注入
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- c# Unity依赖注入WebService
1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...
- .NET MVC5+ Dapper+扩展+微软Unity依赖注入实例
1.dapper和dapper扩展需要在线安装或者引用DLL即可 使用nuget为项目增加Unity相关的包 2.model类 public class UserInfo { public int I ...
随机推荐
- PHP运算符的规律
^异或的规律:只有真真和假假位假 !非 判断失误的另一名比如true是false &只要有真都为真就是真其他都是假 $$就是左边是真的就不判断了 规律是一样的 |或只有假假都为假其他都是真
- javascript精雕细琢(四):认亲大戏——通过console.log彻底搞清this
目录 引言 代码在前 1.function下的this 2.箭头函数下的this 结语 引言 JS中的this指向一直是个老生常谈,但是新手又容易晕的地方.我在网上浏览了很多帖子,但是发 ...
- Java事件基础
package cn.Douzi.Event; import javax.swing.*; import java.awt.*; import java.awt.event.*; public cla ...
- 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)
参考链接: 依赖注入(DI) or 控制反转(IoC) laravel 学习笔记 —— 神奇的服务容器 PHP 依赖注入,从此不再考虑加载顺序 名词解释 IoC(Inversion of Contro ...
- Spring MVC处理响应的 header
我们经常需要在HttpResponse中设置一些headers,我们使用Spring MVC框架的时候我们如何给Response设置Header呢? So easy, 看下面的代码: @Request ...
- idea 常用快捷使用
一.智能提示 1.快速移动到错误代码 :Shift+F2 或者 f2/ 2.快速修复:Alt+Enter 3.快速生成括号:Ctrl+Shift+Enter 二.重构 1.重构功能汇总:Ctrl+Sh ...
- Java入门系列(二)Java常用关键字
53个关键字 在JAVA中目前一共有53个关键字:其中由51+2个保留字=53个关键字 访问控制 private protected public default 类.方法和 ...
- CSS命名方法(笔记)
划分CSS的一些方法(不同的划分方法都有利与弊,要记住,最合适项目的才是最好的): ①按功能划分:将字体的CSS存放在font.css.将控制颜色的CSS存放在color.css.将控制布局的CSS存 ...
- 针对用户在个人中心绑定手机认证的一些js代码。
需求: 1:手机号码校验(格式的校验,手机号码是否已经绑定过)---未实现 2:填完手机号码,点击发送验证码,手机会收到一条信息 3:发送验证码按钮不可用,变成重新发送的倒计时 1):60秒以后又可以 ...
- 配置SpringBoot-从日志系统配置说起
大小系统都需要打日志. 系统在不同环境下对日志的配置要求是不一样的 比如 开发本地: 直接输出到控制台 生产环境: 输出到文件或者额外的日志收集系统, 比如 graylog. (本文不探讨具体日志系统 ...