【发布时间】:2016-04-26 10:29:03
【问题描述】:
我已经阅读了很多关于这个主题的内容,但无法完全掌握。
我正在尝试使用 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 构造函数并使用 解析忍者。
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>();
}
如何使用 Ninject.Extensions.Factory 将此 Factory Pattern 转换为 IoC?请记住,IFeature 的创建取决于用户输入。
【问题讨论】:
-
您能否展示
IFeatureFactory和IFeature的消费者将如何使用这些抽象? -
那么,最好的解决方案是什么?使用 Ninject.Extensions.Factory 是个好主意吗?还是这样?我该如何使用 Ninject.Extensions.Factory 呢?谢谢。
-
我认为这个问题对于您要解决的问题有点含糊。您是否要求 SO 帮助您的应用程序面向未来?如果是这样,如果有 10 个人回答它,你可能最终会得到 12 种不同的意见,这些意见基于每个人都认为是处理面向未来的“正确”方式。我能说的最好的事情是,首先很好地模拟你的需求,然后再考虑如何让你的工具支持它。
标签: c# ninject inversion-of-control ioc-container factory-pattern