Unity具体实现依赖注入包含、属性注入、方法注入。

构造函数注入

public void ConStructorCodeTest1()
{
//默认注册(无命名),如果后面还有默认注册会覆盖前面的
container.RegisterType<IClass, CbClass>();
IClass cb = container.Resolve<IClass>();
cb.ClassName = "武术 2008级"; container.RegisterType<IStudent, QlinStudent>(new InjectionConstructor(cb,"jay.star")); IStudent splitClass = container.Resolve<IStudent>();
//splitClass.Name = "James"; txtResult.Text = splitClass.ShowInfo();
} /// <summary>
/// 班级接口
/// </summary>
public interface IClass
{
string ClassName { get; set; }
string ShowInfo();
}
/// <summary>
/// 计科班
/// </summary>
public class CbClass : IClass
{
public string ClassName { get; set; }
public string ShowInfo()
{
return string.Format("班级名称:{0}", ClassName);
}
}
/// <summary>
/// 电商班
/// </summary>
public class EcClass : IClass
{
public string ClassName { get; set; }
public string ShowInfo()
{
return string.Format("班级名称:{0}", ClassName);
}
} /// <summary>
/// 学生接口
/// </summary>
public interface IStudent
{
string Name { get; set; }
//就读班级
string ShowInfo();
}
/// <summary>
/// 学生
/// </summary>
public class QlinStudent : IStudent
{
public string Name { get; set; }
private IClass ToClass { get; set; } public QlinStudent(IClass _class, string name)
{
Name = name;
ToClass = _class;
}
public string ShowInfo()
{
return string.Format("{0} 就读班级:{1}", Name, ToClass.ClassName);
}
}

  

指定构造函数
如果构造函数有多个,它也会按照上面那样来初始化一个对象,我们还可以显示用InjectionConstructor特性来指定一个构造函数来解析对象,如下声明:

[InjectionConstructor]
public QlinStudent(IClass _class,string name)
{
ToClass = _class;
Name = name;
}

指定参数依赖的注册名称

构造函数中IClass参数,如果IUnityContainer注册了多个,默认是使用无名称的那个注册,也可以通过Dependency依赖哪个名称来指定哪个来注册,代码,指定ec名称如下:

[InjectionConstructor]
public QlinStudent([Dependency("ec")]IClass _class)
{
ToClass = _class;
}

下面注册一个名称为ec的映射,如果没有名称ec的映射将报错

public void ConStructorCodeTest1()
{
//默认注册(无命名),如果后面还有默认注册会覆盖前面的
container.RegisterType<IClass, CbClass>();
//命名注册
//container.RegisterType<IClass, EcClass>();//此句将报错
container.RegisterType<IClass, EcClass>("ec");
container.RegisterType<IStudent, QlinStudent>();
//解析默认对象
IStudent splitClass = container.Resolve<IStudent>();
txtResult.Text = splitClass.ShowInfo();
}

指定参数值
构造器中的参数也可以依赖一个指定的类型值,如下代码依赖于EcClass类型,可以让构造函数中可以传入一个具体的类型,这也是构造函数传参数,如下:

public static void ConStructorCodeTest1()
{
IUnityContainer container = new UnityContainer();
//默认注册(无命名),如果后面还有默认注册会覆盖前面的
container.RegisterType<IClass, CbClass>();
//命名注册
container.RegisterType<IClass, EcClass>("ec");
container.RegisterType<IStudent, QlinStudent>(new InjectionConstructor(new CbClass()));
IStudent splitClass = container.Resolve<IStudent>();
splitClass.ShowInfo();
}

来源:http://www.cnblogs.com/qqlin/archive/2012/10/18/2720828.html

Unity(三)依赖注入的更多相关文章

  1. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  2. .NET 使用unity实现依赖注入

    原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...

  3. 运用Unity实现依赖注入[结合简单三层实例]

    运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...

  4. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  5. IOC使用Unity 实现依赖注入

    转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...

  6. 在 mvc 4 中使用 unity 进行依赖注入

    在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...

  7. 运用Unity实现依赖注入[有参构造注入]

    上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合 ...

  8. Asp.Net MVC4 使用Unity 实现依赖注入

    项目创建参考 上一篇   <<Asp.Net  MVC5  使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...

  9. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

  10. 学习Unity -- 理解依赖注入(IOC)三种方式依赖注入

    IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各 ...

随机推荐

  1. Node.js热部署方式

    1. supervisor: 2. hotnode: 3. node-dev: 4. nodemon:

  2. TopShelf&Quartz.Net实现多任务的值守

    很多时候,我们需要为一个服务器安装一堆的服务,来监控各种数据. 在windows服务器里,我们会部署专门的Quartz.Net多任务轮询服务. 同时,我们针对不同的任务制作专门的***Job.dll, ...

  3. Django常用命令及参数配置(Django 1.8.6)

    常用命令 #新建Django项目 django-admin startproject mysite(项目名) #新建一个APP cd mysite python manager.py startapp ...

  4. mysq修改密码

    1.确定你的mysql 是否能正常工作登录数据库cmd--"命令提示字符"窗口录入,录入cd C:\mysql\bin 并按下回车键,将目录切换为 cd C:\mysql\bin再 ...

  5. Notice: Trying to get property of non-object problem(PHP)解决办法 中间件只能跳转不能返任何数据

    这里实际是调用了一个zend的数据库访问的方法,使用了fetchAll方法,但由于数据库中没有该记录,所以返回的对象是null,所以我就判断对象是否为null: 复制代码代码如下: if($obj== ...

  6. Karma 5:集成 Karma 和 Angular2

    集成 Karma 和 Angular2 我们需要做很多工作,由于需要使用 TypeScript 进行开发,首先需要正确配置 Typescript ,然后正确配置对 Angular2 的引用.还要创建 ...

  7. python之I/O多路复用

         python  IO多路复用 一.多路复用概念: 监听多个描述符(文件描述符(windows下暂不支持).网络描述符)的状态,如果描述符状态改变 则会被内核修改标志位,进而被进程获取进而进行 ...

  8. 2016-08-16: copy-and-swap

    #include <algorithm> // std::copy #include <cstddef> // std::size_t #include <stdio.h ...

  9. 一千行MySQL学习笔记

    以下为本人当年初学MySQL时做的笔记,也从那时起没再更新过,但还是囊括了基本的知识点,有时还翻出来查查.是不是干货,就看亲们了~ 如果哪天笔记有更新了,我还是会更新该文章滴,其实笔记已经放到了Git ...

  10. PDF表单域(FormField)在HTML显示与提交数据到服务器

    1.Adobe Arobat Pro等可以编辑表单域,只有几种控件: 2.展示PDF,可用PdfObject.js,Chrome自带? @{ViewBag.Title = @ViewBag.aaa;} ...