예제 #1
0
 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);
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
 public void RemoveFactory(IDualDirectionalAdapterFactory factory)
 {
     RemoveFactory(factory.SourceType, factory);
     RemoveFactory(factory.AdapterType, factory);
 }