DI (Seaser.NET)ã C# ã§è©¦ãã¦ã¿ã
DIï¼Dependency Injectionãä¾å注å
¥ï¼ã¨ãAOPï¼Aspect-Oriented Programmingãã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ï¼ã¨ããC#ã§ã§ããã¨èãã¦ãã£ã¦ã¿ãã
ã§ãå®éã«å©ç¨ããã©ã¤ãã©ãªã«é¢ãã¦ã¯ã³ã¬ã
Seaser.NET ã¨ãããJava ã§ã¯ããæåãããã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯ã
ã¨ã«ããã³ã¬ãDLãã¦ãããã¸ã§ã¯ãããåç
§ããããããã®ã¨ããbuild ãã£ã¬ã¯ããªã®å
容ãããã ããlib ãã£ã¬ã¯ããªã®ä¸ã® dll ãã³ãã¼ãã¦ç½®ãã¨ãå¿
è¦ãããã
ããã¾ã§ã¯æ®éã
ãã¦ãæ°ã«ãªãå
容ã¯ãããªæãã
DI(ä¾åæ³¨å ¥)
ä¾åæ§ã®ãããã¼ã¿ãå¤é¨ããæå®ãã¦æ³¨å
¥ããã¨ãã¼æ¦å¿µã
å
é¨çãªä¾åã¯èª¿ã¹ã¦ãªããã¨ããããå
¨é¨æ¾ãè¾¼ãã ã
åç
§ãããã®ã¯ãSeasar 㨠log4net ã§OK
ã§ãå
ã«ãªãã³ã¼ãã¯ä»¥ä¸ã®éãã
namespace DIContainerTest { public interface ITestHello { string HelloMessage(); } public class TestHello : ITestHello { string name; public TestHello(string names) { name = names; } #region ITestHello ã¡ã³ã public string HelloMessage() { return "Hello " + name; } #endregion } class Program { ITestHello HelloClass; public Program() { HelloClass = new TestHello("ï½µï¾ï½µï¾"); } public void ShowHello() { Console.WriteLine(HelloClass.HelloMessage()); } static void Main(string[] args) { Program program = new Program(); program.ShowHello(); } } }
ãã¦ããã®ã¨ããHello ï½µï¾ï½µï¾ãã¨è¡¨ç¤ºãããããã ãã表示ãå¤ããã«ã¯ã³ã¼ããæ¸ãæãã¦ã³ã³ãã¤ã«ãããããªãããã§ãããã¾ããã¯ã©ã¹ã®å·®ãæ¿ãã«ãã¦ãã³ã³ãã¤ã«ã®ããç´ããå¿ è¦ã«ãªãã
ã§ãçµå±å¦çã®ä¾åããé¨åãHelloClassãã®ä¸èº«ãå¤ã§æå®ã§ããããã«ããã®ãDIã
ããºã¯ãã©ã®ã¤ã³ã¹ã¿ã³ã¹ãåãåºãã¹ããªã®ããå¤é¨ãã¡ã¤ã«ã«è¨è¿°ããã(ã¨ããããSampleInjection.diconã¨ãããã¡ã¤ã«åã§ä¿å)
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="hello" class="DIContainerTest.TestHello"> <arg>"Azalea"</arg> </component> <component name="ConstructorInjection" class="DIContainerTest.Program" /> </components>
次ã«ãã³ã³ã¹ãã©ã¯ã¿ãæ¸ãæããã
public Program() { Seasar.Framework.Container.IS2Container container = Seasar.Framework.Container.Factory.S2ContainerFactory.Create("SampleInjection.dicon"); HelloClass = (ITestHello)container.GetComponent("hello"); }
ããã¨ããã®è¨å®ãã¡ã¤ã«ãæ¸ãæããã ãã§ãä½æããã¤ã³ã¹ã¿ã³ã¹ãåæåå¼æ°ãå¤æ´ã§ããã¨ã
å
é¨çã«ã¯ System.Reflection ãªã³ã¼ãã沢山ãããã ãããã©ãèªåã§ããããã¯æ¥½ã§ããã