从激活上下文中获取构造函数参数

时间:2013-05-06 14:41:54

标签: c# ninject

假设我想要由ProxyFactory创建实例,我需要能够将此工厂传递给构造函数参数列表。

public class Foo : ViewModelBase
{
    public Bar MyBar { get; private set; }

    [Inject]
    public Foo(Bar bar)
    {
        MyBar = bar;
    }
}

这是我当前的模块,需要进行扩展以传递依赖关系,因为它们将被ninject解析为ProxyFactory

public class InjectionModuleForConstructorArgsTest : NinjectModule
{
    public override void Load()
    {
        ViewModelProxyFactory proxyFactory = new ViewModelProxyFactory();
        Bind<Foo>().ToMethod(
        ctx =>
        {
            return proxyFactory.CreateViewModelProxy<Foo>();
        });
    }
}

基本上,我想要实现的是以下的自动化:

Bind<Foo>().ToMethod(
ctx =>
{
    return proxyFactory.CreateViewModelProxy<Foo>(Kernel.Get<Bar>());
});

知道这是否可行?

1 个答案:

答案 0 :(得分:2)

在这种情况下,我建议将ViewModelProxyFactory作为Provider<Foo>实施,并将Bar注入provider的构造函数

public class ViewModelProxyFactory<T> : Provider<T>
{
    public ViewModelProxyFactory(Bar bar) { this.bar = bar; }

    public T CreateInstance(IContext ctx)
    {
        return putYourFactoryCodeHere
    }
}

Bind<Foo>().ToProvider<ViewModelProxyFactory<Foo>>();