My.Ioc 代码示例——属性和方法注入
2014-09-11 11:08
357 查看
在 My.Ioc 中,我们可以指定让容器在构建好对象实例之后,自动为我们调用对象的公共方法或是为对象的公共属性赋值。在解析对象实例时,容器将根据我们在注册对象时指定的方法调用或属性赋值的先后顺序,调用对象的实例方法或为其属性赋值。
用法比较简单,请看下面的示例代码:
在上面这个示例中,我们看到在注册 Grade 对象时,分别调用了下面三个方法:
这三个方法告诉容器在创建好 Grade 对象实例后,依次执行下列操作:
将 Grade 对象的 TeacherName 属性赋值为 Johnny。
将 Grade 对象的 StudentCount 属性赋值为 50。
调用 Grade 对象的公共方法 PrintRoomName。
这里,我们注意到 PrintRoomName 这个方法中包含一个参数 room,其类型是 Room,这是一个可以自动装配的参数类型。因此,容器在调用该方法时,将会自动为我们创建一个 Room 对象,并将其作为参数传递到 PrintRoomName 方法调用中。
接下来,我们看到在示例代码中注册了 Room 这个对象,同时看到使用了 WithPropertyAutowired 这个 API,它告诉容器 Room 对象的 Grade 属性是可以自动装配的,在创建好 Room 对象之后,应自动为其 Grade 属性提供一个属性值。
本文示例代码以及 My.Ioc 框架源码可在此处获取。
用法比较简单,请看下面的示例代码:
using System; using System.Diagnostics; using My.Ioc; namespace PropertyAndMethodInjection { #region Test Types public class Teacher { } public class Grade { public Grade(Teacher teacher) { Teacher = teacher; } public Teacher Teacher { get; private set; } public int StudentCount { get; set; } public string TeacherName { get; set; } public void PrintRoomName(Room room) { Console.WriteLine(room.Name ?? "No room name given!"); } } public class Room { public Grade Grade { get; set; } public string Name { get; set; } } #endregion class Program { static void Main(string[] args) { IObjectContainer container = new ObjectContainer(false); Register(container); var grade = container.Resolve<Grade>(); Debug.Assert(grade.TeacherName == "Johnny"); Debug.Assert(grade.StudentCount == 50); var room = container.Resolve<Room>(); Debug.Assert(room.Grade != null); Console.ReadLine(); } static void Register(IObjectContainer container) { container.Register<Teacher>().In(Lifetime.Container()); container.Register<Grade>() .WithPropertyValue("TeacherName", "Johnny") .WithPropertyValue("StudentCount", 50) .WithMethod("PrintRoomName") .In(Lifetime.Container()); container.Register<Room>() .WithPropertyAutowired("Grade") .WithPropertyValue("Name", "RoomNameInjected") .In(Lifetime.Transient()); container.CommitRegistrations(); } } }
在上面这个示例中,我们看到在注册 Grade 对象时,分别调用了下面三个方法:
.WithPropertyValue("TeacherName", "Johnny") .WithPropertyValue("StudentCount", 50) .WithMethod("PrintRoomName")
这三个方法告诉容器在创建好 Grade 对象实例后,依次执行下列操作:
将 Grade 对象的 TeacherName 属性赋值为 Johnny。
将 Grade 对象的 StudentCount 属性赋值为 50。
调用 Grade 对象的公共方法 PrintRoomName。
这里,我们注意到 PrintRoomName 这个方法中包含一个参数 room,其类型是 Room,这是一个可以自动装配的参数类型。因此,容器在调用该方法时,将会自动为我们创建一个 Room 对象,并将其作为参数传递到 PrintRoomName 方法调用中。
接下来,我们看到在示例代码中注册了 Room 这个对象,同时看到使用了 WithPropertyAutowired 这个 API,它告诉容器 Room 对象的 Grade 属性是可以自动装配的,在创建好 Room 对象之后,应自动为其 Grade 属性提供一个属性值。
本文示例代码以及 My.Ioc 框架源码可在此处获取。
相关文章推荐
- My.Ioc 代码示例——利用 ObjectBuilderRequested 事件实现延迟注册
- My.Ioc 代码示例——实现自动注册/解析
- spring-04 之IOC 属性注入(注解方式 附代码)
- My.Ioc 代码示例——注册项的注销和更新
- Python面向对象编程——类、对象、属性、方法示例代码
- My.Ioc 代码示例——Lifetime 和 ILifetimeScope
- IOC示例,属性注入,构造函数注入
- My.Ioc 代码示例——如何使用默认构造参数,以及如何覆盖默认构造参数
- (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)
- spring ioc容器注入的集中方式,以及属性注入的集中依赖,继承,使用SPEL表达式,ioc容器的生命周期,bean的几种工厂方法配置方式,bean的自动装配
- block的属性传值和 block的方法传值 代码示例
- My.Ioc 代码示例——避免循环依赖
- My.Ioc 代码示例——使用观察者机制捕获注册项状态的变化
- My.Ioc 代码示例——使用条件绑定和元数据(可选)构建插件树
- Spring IoC – 属性注入 – set方法和构造方法
- spring-03 之IOC 属性注入(配置文件方式 附代码)
- C# 冒泡排序法示例代码(包含泛型方法)
- ASP.NET中读取XML文件信息的4种方法与示例代码
- ASP.NET中读取XML文件信息的4种方法与示例代码