我有一个名为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使用哪个实现?
答案 0 :(得分:0)
您可以使用名称注册每种类型。然后,当您需要解决时,只需将id
传递给Ninject:
// Use better naming though :)
kernel.Bind<IBreakfastProvider>().To<CornFlakeProvider>().Named("1");
然后当你解决:
var breakfastProvider = resolutionRoot.Get<IFoo>(id);