Spring.Net的IOC入门
生活随笔
收集整理的這篇文章主要介紹了
Spring.Net的IOC入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.構造器注入
namespace Spring.Net {class Program{//構造器注入static void Main(string[] args){IApplicationContext ctx = ContextRegistry.GetContext();//通過容器創建對象IUser _user = ctx.GetObject("User") as IUser;_user.Show();Console.ReadKey();}}public interface IUser{string Name { get; set; }void Show();}public class User : IUser{public string Name { get; set; }public void Show(){Console.WriteLine("我是User的Show方法");}} } <?xml version="1.0" encoding="utf-8" ?> <configuration><!--一定要在緊跟著configuration下面添加--><configSections><!--跟下面Spring.Net節點配置是一一對應關系--><sectionGroup name="spring"><section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/><section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /></sectionGroup></configSections><spring><context><resource uri="config://spring/objects"></resource></context> <objects><!--name 必須要唯一的,type=類的全名稱,所在的程序集--><object name="User" type="Spring.Net.User, Spring.Net"> </object> </objects></spring><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup> </configuration>2.屬性及構造器注入
namespace Spring.Net {class Program{static void Main(string[] args){IApplicationContext ctx = ContextRegistry.GetContext();//通過容器創建對象IUser _user = ctx.GetObject("User") as IUser;IPeople _people = ctx.GetObject("People") as IPeople;Test _test = ctx.GetObject("Test") as Test;Console.WriteLine(_user.Name);Console.WriteLine(_user.Age);Console.WriteLine("--------------------------------------------");Console.WriteLine(_people.Man.Name);Console.WriteLine(_people.Man.Age);Console.WriteLine("--------------------------------------------");Console.WriteLine(_test.Name);Console.WriteLine(_test.Age);Console.ReadKey();}}public interface IUser{string Name { get; set; }int Age { get; set; }void Show();}public class User : IUser{public string Name { get; set; }public int Age { get; set; }public void Show(){Console.WriteLine("我是User的Show方法");}}public interface IPeople{IUser Man { get; set; }}public class People : IPeople{public IUser Man { get; set; }}public class Test{public string Name{get;set;}public int Age{get;set;}public Test(string name, int age){Name = name;Age = age;}} } <?xml version="1.0" encoding="utf-8" ?> <configuration><!--一定要在緊跟著configuration下面添加--><configSections><!--跟下面Spring.Net節點配置是一一對應關系--><sectionGroup name="spring"><section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/><section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /></sectionGroup></configSections><spring><context><resource uri="config://spring/objects"></resource></context> <objects><object name="User" type="Spring.Net.User, Spring.Net"><!--01屬性注入-值類型--><property name="Name" value="Linq"></property><property name="Age" value="25"></property></object><object name="People" type="Spring.Net.People, Spring.Net"><!--02屬性注入-引用類型--><property name="Man" ref="User"></property></object><object name="Test" type="Spring.Net.Test, Spring.Net"><!--03構造函數注入--><constructor-arg name="name" value="config配置"></constructor-arg><constructor-arg name="age" value="25"></constructor-arg></object></objects></spring><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup> </configuration>?
3.方法注入
namespace Spring.Net {class Program{static void Main(string[] args){IApplicationContext ctx = ContextRegistry.GetContext(); ObjectFactory dao = (ObjectFactory)ctx.GetObject("objectFactory");//查詢方法注入//查詢方法注入就利用了這些功能。個人感覺查詢方法注入類似抽象工廠,//為之不同的是,可以不用寫抽象的實現代碼,通過配置文件動態的切換組件。 dao.CreatePersonDao().Save();//事件注入Door door = (Door)ctx.GetObject("door");door.OnOpen("Opening!");Console.WriteLine();Console.Read();}}public abstract class ObjectFactory{//或者可以是一個虛方法 public abstract PersonDao CreatePersonDao();}public class PersonDao{public void Save(){Console.WriteLine("保存數據");}}//先定義一個委托public delegate string OpenHandler(string arg);public class Door{public event OpenHandler OpenTheDoor;public void OnOpen(string arg){//調用事件if (OpenTheDoor != null){Console.WriteLine(OpenTheDoor(arg));}}}public class Men{public string OpenThisDoor(string arg){return "參數是:" + arg;}} } <?xml version="1.0" encoding="utf-8" ?> <configuration><!--一定要在緊跟著configuration下面添加--><configSections><!--跟下面Spring.Net節點配置是一一對應關系--><sectionGroup name="spring"><section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/><section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /></sectionGroup></configSections><spring><context><resource uri="config://spring/objects"></resource></context> <objects><!--查詢方法--><object id="personDao" type="Spring.Net.PersonDao, Spring.Net" singleton="false"/><object id="objectFactory" type="Spring.Net.ObjectFactory, Spring.Net"><lookup-method name="CreatePersonDao" object="personDao"/></object><!--事件注入--><object id="men" type="Spring.Net.Men, Spring.Net"><listener event="OpenTheDoor" method="OpenThisDoor"><ref object="door"/></listener></object><object id="door" type="Spring.Net.Door, Spring.Net" /></objects></spring><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup> </configuration>?
轉載于:https://www.cnblogs.com/lgxlsm/p/5410944.html
總結
以上是生活随笔為你收集整理的Spring.Net的IOC入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vlan和如何建立vlan和vconif
- 下一篇: 初识设计模式、软件设计的六大原则