繁体   English   中英

Ninject C#中的工厂方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM