我已阅读了很多关于此主题的内容,但无法完全掌握它。C# - 使用依赖注入(ninject)而不是工厂模式
我正在尝试使用Ninject.Extensions.Factory而不是我的工厂根据用户输入创建新对象。我想充分利用Ninject功能和IoC概念。
现在的代码如下所示:
interface IFeatureFactory
{
IFeature createFeature(int input);
}
和:
class BasicFeatureFactory : IFeatureFactory
{
public IFeature createFeature(int input)
{
switch (input)
{
case 1:
return new FirstFeature();
case 2:
return new SecondFeature();
default:
return null;
}
}
}
在未来,的iFeature将有依赖,所以我想这样做的IoC的方式。
编辑:
消费类 - 在IFeatureFactory和IUILayer注入FeatureService构造和使用Ninject解决。
private IFeatureFactory featureFactory;
private IUILayer uiHandler;
public FeatureService(IFeatureFactory featureFactory, IUILayer uiHandler)
{
this.featureFactory = featureFactory;
this.uiHandler = uiHandler;
}
public void startService()
{
int userSelection = 0;
uiHandler.displayMenu();
userSelection = uiHandler.getSelection();
while (userSelection != 5)
{
IFeature feature = featureFactory.createFeature(userSelection);
if (feature != null)
{
IResult result = feature.execFeature();
uiHandler.displayResult(result);
}
else
{
uiHandler.displayErrorMessage();
}
uiHandler.displayMenu();
userSelection = uiHandler.getSelection();
}
}
和iFeature的类:
public interface IFeature
{
IResult execFeature();
}
绑定:
public override void Load()
{
Bind<IFeatureFactory>().To<BasicFeatureFactory>();
Bind<IUILayer>().To<ConsoleUILayer>();
}
我怎么可以这样工厂模式转换为的IoC与Ninject.Extensions.Factory?请记住,创建IFeature取决于用户输入。
您能否展示'IFeatureFactory'和'IFeature'的使用者如何使用这些抽象? – Steven
那么,这个最好的解决方案是什么?使用Ninject.Extensions.Factory是一个好主意吗?或者像这样离开它?我该如何使用Ninject.Extensions.Factory?谢谢。 –
我觉得这个问题对于你想解决什么问题有点太模糊。你是否真的要求这样来帮助你面对将来的申请?如果是这样,如果有10个人回答它,那么根据大家认为“正确”的方式来处理未来打样,你可能会得出12种不同的意见。我能说的最好的事情是,首先需要模拟您的需求**,然后担心如何使您的工具支持该需求。 –