[英]Factory methods in Ninject C#
我有一个名为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确定要使用的实现?
您可以使用名称注册每种类型。 然后,当您需要解析时,只需将id
传递给Ninject:
// Use better naming though :)
kernel.Bind<IBreakfastProvider>().To<CornFlakeProvider>().Named("1");
然后当您解决时:
var breakfastProvider = resolutionRoot.Get<IFoo>(id);
使用构造函数注入:
public class BreakfastProviderFactory
{
private readonly CornFlakeProvider provider1;
private readonly MuesliProvider provider2;
private readonly ToastProvider provider3;
public BreakfastProviderFactory(CornFlakeProvider provider1,
MuesliProvider provider2, ToastProvider provider3) {
{
this.provider1 = provider1;
this.provider2 = provider2;
this.provider3 = provider3;
}
public IBreakfastProvider GetBreakfastProvider(int id)
{
switch (id)
{
case 1: return this.provider1;
case 2: return this.provider2;
case 3: return this.provider3;
default: throw new ApplicationException("Unknown provider id.");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.