2016-01-11 38 views
0

我有這樣的工廠:進樣工廠使用接口

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(); 
     } 
    } 
} 

你覺得呢?

+0

您的具體問題是什麼? – Matten

+0

是否使用靜態工廠?什麼缺點或誤解,或者你在我的代碼中看到? – mtkachenko

+0

爲了記錄,[在抽象工廠內使用switch case語句是代碼氣味](http://stackoverflow.com/questions/31950362/factory-method-with-di-and-ioc/31971691#31971691)表明設計存在問題。另外,使用'Enum'指定類型是一種不好的做法,因爲這意味着當枚舉類型更改時需要更改多個類。 – NightOwl888

回答

0

看看在Abstract Factory Pattern

意向

抽象工廠提供的界面,用於創建一個家庭相關的對象,但沒有明確指定其類。


我看到這個問題已經與現在以前標記。不要與抽象工廠混淆。

+0

我知道抽象fatory,但我沒有「家族的相關對象」。我只想根據傳入的枚舉值創建對象實例。 – mtkachenko

+0

您提到了IOC容器,這讓我覺得您有兩個或更多不同類的想要構建的類。爲給定集合實例化適當的工廠 - 我想象一個'enum' - 然後如OP所示調用該工廠。 – radarbob