Можете ли вы зарегистрировать существующий экземпляр типа в контейнере Windsor?

Можно ли в контейнере Windsor IOC зарегистрировать тип, для которого у меня уже есть экземпляр, вместо того, чтобы контейнер создавал его?


person Cameron MacFarland    schedule 18.09.2008    source источник


Ответы (1)


В свойстве ядра контейнера есть метод 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);
}
person Chris Canal    schedule 18.09.2008
comment
В качестве обновления этот метод устарел. Вместо этого используйте container.Register(Component.For<T>().Instance(myT));. - person eouw0o83hf; 10.04.2012
comment
Это ваши юнит-тесты или они взяты из какой-то документации по замку? Если их больше, не могли бы вы дать ссылку? - person joniba; 02.08.2012