Search code examples
delegatescastle-windsor

Func<T> injecting with Windsor container


Here is a code excerpt from AspComet project that works with Autofac.

public MessageBus(IClientRepository clientRepository, Func<IMessagesProcessor> messagesProcessorFactoryMethod)
{
    this.clientRepository = clientRepository;
    this.messagesProcessorFactoryMethod = messagesProcessorFactoryMethod;
}

How can I inject "Func<IMessagesProcessor> messagesProcessorFactoryMethod" with Windsor, is it possible?

Thanks.


Solution

  • container.Register(Component.For<Func<Foo>>().Instance(f));
    

    Here's a passing unit test that demonstrates the concept:

    [TestMethod]
    public void Test2()
    {
        Func<string> f = () => "Hello world";
    
        var container = new WindsorContainer();
        container.Register(Component.For<Func<string>>().Instance(f));
    
        var resolvedFunc = container.Resolve<Func<string>>();
    
        Assert.AreEqual("Hello world", f());
    }