你可以注册在温莎容器的类型的现有实例?你可以、容器、实例、类型

2023-09-04 07:41:29 作者:无戏配角

在温莎IOC容器是可以注册的,而不是具有容器创建它,我已经有了一个实例的类型,?

In the Windsor IOC container is it possible to register a type that I've already got an instance for, instead of having the container create it?

推荐答案

对于所用容器的核心属性AddComponentInstance方法。

There is a AddComponentInstance method on the Container's Kernel property.

从单元测试:

[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);
	}