私はこのデザインを持っています:
public interface IFactory<T> {
T Create();
T CreateWithSensibleDefaults();
}
public class AppleFactory : IFactory<Apple> { ... }
public class BananaFactory : IFactory<Banana> { ... }
// ...
架空のものApple
とBanana
ここでは、必ずしも共通のタイプを共有しているわけではありません(object
もちろん、それ以外)。
クライアントが特定の工場に依存する必要はないので、代わりにFactoryManager
、新しいタイプを要求することができます。それにはFactoryForType
方法があります:
IFactory<T> FactoryForType<T>();
これで、のようなものを使用して適切なインターフェイスメソッドを呼び出すことができますFactoryForType<Apple>().Create()
。ここまでは順調ですね。
しかし、実装レベルで問題があります。タイプからIFactory<T>
sへのこのマッピングをどのように保存するのですか?素朴な答えはですが、 (私はC#3.5を使用しています)にIDictionary<Type, IFactory<T>>
型の共分散がないため、それは機能しません。T
私はただで立ち往生してIDictionary<Type, object>
いて、手動でキャストをしていますか?