public void RegisterFactory(IDualDirectionalAdapterFactory factory) { Debug.Assert(factory.SourceType.IsClass, "source type must be a class"); RegisterFactory(factory.SourceType, factory); Debug.Assert(factory.AdapterType.IsClass, "adapter type must be a class"); RegisterFactory(factory.AdapterType, factory); }
private void RegisterFactory(Type type, IDualDirectionalAdapterFactory factory) { List <IDualDirectionalAdapterFactory> l = FindFactoryList(type); if (l == null) { l = new List <IDualDirectionalAdapterFactory>(); _classToFactoryList.Add(type, l); } l.Add(factory); }
private void RemoveFactory(Type type, IDualDirectionalAdapterFactory factory) { List <IDualDirectionalAdapterFactory> l = FindFactoryList(type); if (l != null) { l.Remove(factory); if (l.Count == 0) { _classToFactoryList.Remove(type); } } }
private IAdaptable ChallengeUsingAdapterFactory(IDualDirectionalAdapterFactory factory, IAdaptable obj, Type adapter) { Type dest = factory.SourceType == obj.GetType() ? factory.AdapterType : factory.SourceType; //変換先クラス if (adapter.IsAssignableFrom(dest)) //これならビンゴといっていい。現在はこのケースしかないはず { IAdaptable t = factory.SourceType == obj.GetType() ? factory.GetAdapter(obj) : factory.GetSource(obj); Debug.Assert(adapter.IsInstanceOfType(t)); return(t); } //複雑なケース。 //変換後のオブジェクトのGetAdapterを読んでみる(再帰呼び出し対策必要)、 //2ステップ以上のFactoryを使用する、などが必要。 //TODO 現在未サポート return(null); }
public void RemoveFactory(IDualDirectionalAdapterFactory factory) { RemoveFactory(factory.SourceType, factory); RemoveFactory(factory.AdapterType, factory); }