Obter extensão de fábrica ninject para permitir que parâmetros de fábrica sejam passados ​​para dependências

Usando a extensão Ninject Factory, você pode gerar fábricas automaticamente e deixar a fábrica passar parâmetros para o construtor da classe. O seguinte teste passa:

public interface IBar
{
    int Foo { get; }
}

public class Bar : IBar
{
    int _foo;
    public Bar(int foo) { _foo = foo; }
    public int Foo { get { return _foo; } }
}

public interface IBarFactory
{
    IBar CreateTest(int foo);
}

[Test]
public void ExecuteTest()
{
    var kernel = new StandardKernel();
    kernel.Bind<IBar>().To<Bar>();
    kernel.Bind<IBarFactory>().ToFactory();
    var factory = kernel.Get<IBarFactory>();
    var actual = factory.CreateTest(42);
    Assert.That(actual, Is.InstanceOf<Bar>());
}

No entanto, no meu problema específico, gostaria que passasse os argumentos de fábrica para uma dependência da classe que estou construindo, não a classe em si, assim:

public interface IBarContainer
{
    IBar Bar { get; }
}

public class BarContainer : IBarContainer
{
    IBar _bar;
    public BarContainer(IBar bar) { _bar = bar; }
    public IBar Bar { get { return _bar; } }
}

public interface ITestContainerFactory
{
    IBarContainer CreateTestContainer(int foo);
}

[Test]
public void ExecuteTestContainer()
{
    var kernel = new StandardKernel();
    kernel.Bind<IBar>().To<Bar>();
    kernel.Bind<IBarContainer>().To<BarContainer>();
    kernel.Bind<ITestContainerFactory>().ToFactory();
    var factory = kernel.Get<ITestContainerFactory>();
    var actual = factory.CreateTestContainer(42);
    Assert.That(actual.Bar, Is.InstanceOf<Bar>());
}

Este teste falha com a mensagem:

Ninject.ActivationException: Erro ao ativar int Nenhuma ligação correspondente está disponível e o tipo não é auto-bindable. Caminho de ativação:
3) Injeção de dependência int no parâmetro foo do construtor do tipo Bar
2) Injeção de IBar de dependência na barra de parâmetros do construtor do tipo BarContainer
1) Pedido de IBarContainer

Existe uma maneira de fazer a fábrica descobrir que eu quero usar o argumento 'foo' passado ao resolver a dependência 'Bar'?

questionAnswers(3)

yourAnswerToTheQuestion