Exemple #1
0
 /// <summary>
 /// Creates instance of data model codegerator from database connection.
 /// </summary>
 /// <param name="languageProvider">Language provider to use for data model codegeneration.</param>
 /// <param name="nameConverter"><see cref="INameConversionProvider"/> pluralization service implementation.</param>
 /// <param name="options">Scaffolding process customization options.</param>
 /// <param name="interceptors">Optional custom scaffold interceptors.</param>
 public Scaffolder(ILanguageProvider languageProvider, INameConversionProvider nameConverter, ScaffoldOptions options, ScaffoldInterceptors?interceptors)
 {
     Language        = languageProvider;
     _namingServices = new NamingServices(nameConverter);
     _options        = options;
     _interceptors   = interceptors;
 }
        public void UpdateAsync()
        {
            List <NamingService> namingServices;

            // 更新処理中にネーミングサービスの追加や削除されると困るのでコピーしておく。
            // (更新処理中にずっとロックしておくと、AddやRemoveが止まってしまう)
            lock (NamingServices)
            {
                namingServices = NamingServices.ToList();
                IsUpdating     = true;
            }

            Observable.Start(() =>
            {
                lock (OutPortTree)
                    lock (InPortTree)
                    {
                        OutPortTree.Clear(); //TODO: Clearだと通知されないことがある。RemoveAllだとアクセスエラー。
                        InPortTree.Clear();

                        foreach (var namingService in namingServices)
                        {
                            try
                            {
                                namingService.Client.ClearZombie <RTObject>();
                                OutPortTree.Add(namingService.Factory.CreateOutPortTree());
                                InPortTree.Add(namingService.Factory.CreateInPortTree());
                            }
                            catch (Exception)
                            {
                                namingService.IsAlive = false;
                            }
                        }
                    }
            }).Subscribe(_ => IsUpdating = false);
        }