我们可以在Windsor容器中注册类型的现有实例吗?
时间:2020-03-06 14:20:25 来源:igfitidea点击:
在Windsor IOC容器中,可以注册我已经拥有实例的类型,而不用让容器创建它吗?
解决方案
容器的内核属性上有一个AddComponentInstance方法。
从单元测试:
[Test] public void AddComponentInstance() { CustomerImpl customer = new CustomerImpl(); kernel.AddComponentInstance("key", typeof(ICustomer), customer); Assert.IsTrue(kernel.HasComponent("key")); CustomerImpl customer2 = kernel["key"] as CustomerImpl; Assert.AreSame(customer, customer2); customer2 = kernel[typeof(ICustomer)] as CustomerImpl; Assert.AreSame(customer, customer2); } [Test] public void AddComponentInstance_ByService() { CustomerImpl customer = new CustomerImpl(); kernel.AddComponentInstance <ICustomer>(customer); Assert.AreSame(kernel[typeof(ICustomer)],customer); } [Test] public void AddComponentInstance2() { CustomerImpl customer = new CustomerImpl(); kernel.AddComponentInstance("key", customer); Assert.IsTrue(kernel.HasComponent("key")); CustomerImpl customer2 = kernel["key"] as CustomerImpl; Assert.AreSame(customer, customer2); customer2 = kernel[typeof(CustomerImpl)] as CustomerImpl; Assert.AreSame(customer, customer2); }