Ninject C#中的工厂方法

时间:2015-04-29 07:44:16

标签: c# ninject

我有一个名为IBreakfastProvider的接口,它有几个实现。目前我的代码根据id决定使用哪一个。它使用工厂方法,如下所示:

public IBreakfastProvider GetBreakfastProvider(int id)
{
    switch (id)
    {
        case 1:
            return new CornFlakeProvider(new SomeDependency());
        case 2:
            return new MuesliProvider(new SomeOtherDependency());
        case 3:
            return new ToastProvider();
        default:
            throw new ApplicationException("Unknown provider id."); 
    }
}

IBreakfast提供程序的每个实现都可以拥有自己的依赖项。如何替换此方法以使用Ninject来计算基于此整数id使用哪个实现?

1 个答案:

答案 0 :(得分:0)

您可以使用名称注册每种类型。然后,当您需要解决时,只需将id传递给Ninject:

// Use better naming though :)
kernel.Bind<IBreakfastProvider>().To<CornFlakeProvider>().Named("1");

然后当你解决:

var breakfastProvider = resolutionRoot.Get<IFoo>(id);