Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you register an existing instance of a type in the Windsor Container?

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?

like image 952
Cameron MacFarland Avatar asked Sep 18 '08 08:09

Cameron MacFarland


1 Answers

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

From the Unit Tests:

[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);
}
like image 101
Chris Canal Avatar answered Oct 02 '22 13:10

Chris Canal