我有這樣的工廠:進樣工廠使用接口
public static class ClassFactory
{
public static IEnumHereClass CreateClass(EnumHere type)
{
switch (type)
{
case EnumHere.First:
return new EnumHereFirstClass();
case EnumHere.Second:
return new EnumHereSecondClass();
default:
throw new NotSupportedException();
}
}
}
看起來不錯。但我在這裏看到問題:我不能使用IoC容器注入它(例如unity),並且不能嘲笑它。我想使這個改變(使用的界面注入並刪除靜態):
public class ClassFactory : IClassFactory
{
public IEnumHereClass CreateClass(EnumHere type)
{
switch (type)
{
case EnumHere.First:
return new EnumHereFirstClass();
case EnumHere.Second:
return new EnumHereSecondClass();
default:
throw new NotSupportedException();
}
}
}
你覺得呢?
您的具體問題是什麼? – Matten
是否使用靜態工廠?什麼缺點或誤解,或者你在我的代碼中看到? – mtkachenko
爲了記錄,[在抽象工廠內使用switch case語句是代碼氣味](http://stackoverflow.com/questions/31950362/factory-method-with-di-and-ioc/31971691#31971691)表明設計存在問題。另外,使用'Enum'指定類型是一種不好的做法,因爲這意味着當枚舉類型更改時需要更改多個類。 – NightOwl888