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. Maven进价:Maven构建错误汇总

    问题:The method of type must override asuperclass? annotation:@Override的原因 办法:项目右键->build path-> ...

  2. 使用.net的Cache框架快速实现Cache操作

    本文转载自:http://www.cnblogs.com/TianFang/p/3430169.html .NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一 ...

  3. Ajax跨域问题

    为了数据安全,默认情况下ajax请求是不支持跨域访问. 但是可以通过以下方法让ajax接收跨域API地址 第一种:JSONP比较老,较简单的请求可以考虑使用. JS代码 $(function () { ...

  4. mysql死锁问题分析

    线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...

  5. Linux下date命令,格式化输出,时间设置

    date命令的帮助信息 [root@localhost source]# date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] ...

  6. Android String操作

    android String.valueOf(ch).getBytes("GBK") --------------------------------------------- S ...

  7. 发送SMS短信(JSON) 转载

    http://blog.csdn.net/ldl22847/article/details/42553883 public   static string GetMobileConfByUserId( ...

  8. Android 通过按钮弹出系统菜单(通过Button显示菜单)转

    myButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openOpti ...

  9. [ActionScript 3.0] AS3.0 复制xml,并赋值

    var template:XML= <person><name><first>FIRST</first><last /></name& ...

  10. 链地址法实现HashMap

    前注:本文介绍的HashMap并非Java类库的实现.而是根据哈希表知识的一个实现. 上文介绍了开放地址法实现HashTable,它的缺点是对hashCode映射为地址后如果出现重复地址,则会占用其他 ...