#眉標=Enterprise Library、Unity、Resolve #副標=設計模型套件系列(16) #大標=探索Unity Application Block註冊型態 #作者=文/圖 王寧疆 ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); myContainer.RegisterType(); IMyService myServiceInstance = myContainer.Resolve(); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); LoggingService myExistingObject = new LoggingService(); myContainer.RegisterInstance(myExistingObject); IMyService myServiceInstance = myContainer.Resolve(); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); ================ ===<反灰>============= myContainer.RegisterType(); ================ ===<反灰>============= myContainer.RegisterType(); ================ ===<反灰>============= myContainer.RegisterType("Customers"); ================ ===<反灰>============= myContainer.RegisterType(new ContainerControlledLifetimeManager()); ================ ===<反灰>============= myContainer.RegisterType(new ContainerControlledLifetimeManager()); ================ ===<反灰>============= myContainer.RegisterType("Customers", new ContainerControlledLifetimeManager()); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); EmailService myEmailService = new EmailService(); myContainer.RegisterInstance(myEmailService); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); myContainer.RegisterInstance(myEmailService); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); EmailService myEmailService = new EmailService(); myContainer.RegisterInstance(myEmailService, new ExternallyControlledLifetimeManager()); ================ ===<反灰>============= EmailService myEmailService = new EmailService(); IUnityContainer myContainer = new UnityContainer() .RegisterType() .RegisterType() .RegisterInstance(myEmailService); ================ ===<反灰>============= IMyService result = myContainer.Resolve(); ================ ===<反灰>============= MyServiceBase result = myContainer.Resolve(); ================ ===<反灰>============= CustomerService result = (CustomerService)myContainer.Resolve(); ================ ===<反灰>============= IMyService result = myContainer.Resolve("Data"); ================ ===<反灰>============= IEnumerable objects = myContainer.ResolveAll(); //取出Unity容器中所有的對應登記的物件 foreach (IMyObject foundObject in objects) //取出每一個物件 { MyRealObject theObject = foundObject as MyRealObject; //轉型成欲使用的型態 if (null != theObject) //如果轉型成功 { //使用物件 } } ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); CustomerService result = myContainer.BuildUp(myService); ================ ===<反灰>============= IUnityContainer myContainer = new UnityContainer(); CustomerService result = myContainer.BuildUp(myService, "Customers"); ================ ===<反灰>============= public class CustomerService { public CustomerService(LoggingService myServiceInstance) { myServiceInstance.WriteToLog("SomeValue"); } } ================ ===<反灰>============= IUnityContainer uContainer = new UnityContainer(); CustomerService myInstance = uContainer.Resolve(); ================ ===<反灰>============= public class ProductService { private SupplierData supplier; [Dependency] public SupplierData SupplierDetails { get { return supplier; } set { supplier = value; } } } ================ ===<反灰>============= IUnityContainer uContainer = new UnityContainer(); ProductService myInstance = uContainer.Resolve(); myInstance.SupplierDetails.SomeProperty = "Some value"; ================ ===<反灰>============= public class MyObject { public SomeOtherObject dependentObject; [InjectionMethod] public void Initialize(SomeOtherObject dep) { dependentObject = dep; } } ================ ===<反灰>============= IUnityContainer uContainer = new UnityContainer(); MyObject myInstance = uContainer.Resolve(); ================