我已閱讀了很多關於此主題的內容,但無法完全掌握它。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種不同的意見。我能說的最好的事情是,首先需要模擬您的需求**,然後擔心如何使您的工具支持該需求。 –