unity(c# ioc框架) 使用总结
这里的unity指的是完成依赖注入的unity而不是游戏引擎。
原本项目完成依赖注入用的是spring.net,但是spring.net已经很久没人维护了,所以微软官方推出的Unity成为了替代spring.net的最佳候选之一。
简单控制台demo:
首先新建控制台应用,nuget搜索unity并安装。
using System;
using Unity;
using Unity.Attributes; namespace ConsoleApp1
{
public class Index
{ [Dependency]
public virtual IUserService UserService { set; get; } public static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<IUserService, UserService>(); //注册
IUserService userService = container.Resolve<IUserService>(); //获取
userService.Hello();
}
} public interface IUserService
{
void Hello();
} class UserService : IUserService
{
public void Hello()
{
Console.WriteLine("hello");
}
}
}
在asp.net mvc里使用unity:
1、新建asp.net mvc应用,nuget安装unity.mvc
2、新建类库BLL、IBLL,完成后目录如下:

3、BLL新建UserService,IBLL新建IUserService,实现Hello方法
namespace IBLL
{
public interface IUserService
{
string Hello();
} }
using IBLL; namespace BLL
{
public class UserService:IUserService
{
public string Hello()
{
return "hello";
}
}
}
4:在Global.asax.cs里填写配置。示例如下:
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using BLL;
using IBLL;
using Unity;
using Unity.AspNet.Mvc; namespace WebApp
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); var container = BuildUnityContainer(); //自定义BuildUnityContainer方法,获取容器
DependencyResolver.SetResolver(new UnityDependencyResolver(container)); } IUnityContainer BuildUnityContainer()
{
UnityContainer container = new UnityContainer();
container.RegisterType<IUserService, UserService>();return container;
}
}
}
5、在Control中获得UserService类并使用
using System.Web.Mvc;
using IBLL; namespace WebApp.Controllers
{
public class HomeController : Controller
{
private IUserService UserService;public HomeController(IUserService userService)
{
this.UserService = userService; //使用构造函数注入
} public ActionResult Index()
{
string str = UserService.Hello();
return Content(str);
} }
}
这样就完成了一个最简单的mvc demo。
别的如使用配置文件、使用其他方法注入等详细操作,可以参考这篇博文:https://www.cnblogs.com/qqlin/archive/2012/10/18/2720828.html
unity官方文档:https://msdn.microsoft.com/en-us/library/ff649564.aspx
unity(c# ioc框架) 使用总结的更多相关文章
- .Net IOC 框架
CastleWindsor 参见:CastleWindsor | .Net IOC 框架 AutoFace 参见:AutoFace | .Net IOC 框架 Unity 参见:Unity | .Ne ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
- 依赖反转Ioc和unity,autofac,castle框架教程及比较
1.依赖倒置的相关概念 http://www.cnblogs.com/fuchongjundream/p/3873073.html IoC模式(依赖.依赖倒置.依赖注入.控制反转) 2.依赖倒置的方式 ...
- MVC4 基于 Unity Ioc 框架的 ControllerFactory
首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory 的UnityControllerFactory: 重写虚方法GetC ...
- 今天研究Unity Ioc 框架
今天研究Unity Ioc 框架,被自己坑了两个多小时. 运行就报错,反反复复检查了很多次,配置文件,代码都没有问题,也从新写了好几遍. 最后仔细看报错消息才知道,config文件没有生成到目录……… ...
- 各大主流.Net的IOC框架性能测试比较
Autofac下载地址:http://code.google.com/p/autofac/ Castle Windsor下载地址:http://sourceforge.net/projects/cas ...
- .NET领域最为流行的IOC框架之一Autofac
一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也是用的Autofac. Orchad和Nopcomm ...
- IOC框架Ninject实践总结
原文地址:http://www.cnblogs.com/jeffwongishandsome/archive/2012/04/15/2450462.html IOC框架Ninject实践总结 一.控制 ...
- 国人编写的开源 .net Ioc 框架——My.Ioc 简介
My.Ioc 是作者开发的一款开源 IoC/DI 框架,下载地址在此处.它具有下面一些特点: 高效 在实现手段上,My.Ioc 通过使用泛型.缓存.动态生成代码.延迟注册.尽量使用抽象类而非接口等方式 ...
随机推荐
- 小技巧:selenium java中如何使用chrome默认的profile
使用浏览器默认的profile可以在一定程度上实现免登录的效果,另外默认的profile中很多文件都被缓存了,也有利于加快测试的速度 System.setProperty("webdrive ...
- Python数据结构之四——set(集合)
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...
- angular aot编译报错 ERROR in ./src/main.ts 解决方法
昨天打包项目时遇到下图这样的错误: 开始以为了某些模块存在但未使用,折腾一番无果,后来升级angular-cli就搞定了,方法很简单: 1.删掉node_modules 2.更改package.jso ...
- Opencv 330 如何裁剪图片中大的目标?
main.cpp cv::Mat CropImage(cv::Mat& src, cv::RotatedRect& rotatedRect); cv::Mat MaxBoxSelect ...
- the c programing language 学习过程3
ControlFlow 控制流 specify 指定 compound statement 复合语句 cryptic有隐含意义的 ambiguity歧义 robust稳健 disintegratio ...
- poj1011 && uva307 DFS + 剪枝
将木棒从大到小排列,保证每次的选择都是最长可选的木棒. 剪枝: 1 . 如果第 i 根木棒被选择却无法成功拼接,那么后面与其长度相同的也不能选择. 2 . 如果第 cnt + 1 根木棒无法成功拼接, ...
- python高阶函数式编程
from functools import reduce def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return ...
- SpringMVC的常用注解
在SpringMVC中常用的注解主要都是用于Controller上,所以下面的四大不同类型的注解都是根据它们处理的request的不同内容部分来区分的: 处理requ ...
- Windows驱动开发工具 WDK 学习笔记(1)
目标:能够把电脑当作一个集成有高性能处理器的开发板用起来,当然,还自带了一个高级的操作系统Windows(必须的).总之,就是在一个带了操作系统的高性能开发板上的驱动程序开发. 性质:纯属业余爱好 1 ...
- [php]在PHP中读取和写入WORD文档的代码
测试平台windows 使用的windows的com主键. <? // 建立一个指向新COM组件的索引 $word = new COM("word.application") ...