//    private static IContainer container;

        public static FIDialog CreateInstance(FILogicQueries logicQueriesFlight, FILogicCmds logicCommandsFlight, ISLogicQueries logicQueriesShipInfo, ISLogicCommands logicCommandsShipInfo)
        {
            // Dependency Injection
            //Flights
            CServiceOfferFlight  serviveOfferFlight  = new CServiceOfferFlight(logicCommandsFlight);
            CServiceSearchFlight serviceSearchFlight = new CServiceSearchFlight(logicQueriesFlight);
            //Shipping
            CServiceOfferShipInfo  serviveOfferShipInfo  = new CServiceOfferShipInfo(logicCommandsShipInfo);
            CServiceSearchShipInfo serviceSearchShipInfo = new CServiceSearchShipInfo(logicQueriesShipInfo);

            //Flights
            CViewModelMainFlight           viewModelMainFlight           = new CViewModelMainFlight(serviceSearchFlight);
            CViewModelFilterFlight         viewModelFilterFlight         = new CViewModelFilterFlight(serviceSearchFlight, viewModelMainFlight);
            CViewModelUpdateFlight         viewModelUpdateFlight         = new CViewModelUpdateFlight(serviceSearchFlight, serviveOfferFlight, viewModelMainFlight);
            CViewModelAdministrationFlight viewModelAdministrationFlight = new CViewModelAdministrationFlight(serviveOfferFlight, viewModelMainFlight, serviceSearchFlight, viewModelUpdateFlight);
            //Shipping
            CViewModelMainShipInfo           viewModelMainShipInfo           = new CViewModelMainShipInfo(serviceSearchShipInfo);
            CViewModelFilterShipInfo         viewModelFilterShipInfo         = new CViewModelFilterShipInfo(serviceSearchShipInfo, viewModelMainShipInfo);
            CViewModelUpdateShipInfo         viewModelUpdateShipInfo         = new CViewModelUpdateShipInfo(serviceSearchShipInfo, serviveOfferShipInfo, viewModelMainShipInfo);
            CViewModelAdministrationShipInfo viewModelAdministrationShipInfo = new CViewModelAdministrationShipInfo(serviveOfferShipInfo, viewModelMainShipInfo, serviceSearchShipInfo, viewModelUpdateShipInfo);

            //Flights
            CViewUpdateFlight         viewUpdateFlight         = new CViewUpdateFlight(viewModelUpdateFlight);
            CViewFilterFlight         viewFilterFlight         = new CViewFilterFlight(viewModelFilterFlight);
            CViewAdministrationFlight viewAdministrationFlight = new CViewAdministrationFlight(viewModelAdministrationFlight, viewUpdateFlight);
            //Shipping
            CViewUpdateShipInfo         viewUpdateShipInfo         = new CViewUpdateShipInfo(viewModelUpdateShipInfo);
            CViewFilterShipInfo         viewFilterShipInfo         = new CViewFilterShipInfo(viewModelFilterShipInfo);
            CViewAdministrationShipInfo viewAdministrationShipInfo = new CViewAdministrationShipInfo(viewModelAdministrationShipInfo, viewUpdateShipInfo);

            CViewMain viewMain = new CViewMain(viewModelMainFlight, viewModelMainShipInfo, viewFilterFlight,
                                               viewAdministrationFlight, viewAdministrationShipInfo, viewFilterShipInfo, viewUpdateFlight, viewUpdateShipInfo);;

            return(viewMain);

            //CBootstrapper bootstrapper = new CBootstrapper();
            //IContainer container = bootstrapper.InitContainer( logicQueries, logicCommands );
            //IDialog dialog = container.Resolve<IDialog>();
            //return dialog;
        }
        public IContainer InitContainer(FILogicQueries logicQueries, FILogicCmds logicCommands)
        {
            ContainerBuilder containerBuilder = new ContainerBuilder();

            // Service Layer
            containerBuilder
            .RegisterType <CServiceSearchFlight>()
            .AsSelf()
            .WithParameter("logicQueries", logicQueries)
            .SingleInstance();

            containerBuilder
            .RegisterType <CServiceOfferFlight>()
            .AsSelf()
            .WithParameter("logicCommands", logicCommands)
            .SingleInstance();

            // ModelView Layer
            containerBuilder
            .RegisterType <CViewModelMainFlight>()
            .AsSelf()
            .SingleInstance();

            // View Layer

            containerBuilder
            .RegisterType <CViewMain>()
            .As <FIDialog>()
            .SingleInstance();



            container = containerBuilder.Build();

            return(container);
        }
        void Run()
        {
            // MSAccess
            _dataSourcePath = @"seasky.accdb";

            // SQLite
            //_dataSourcePath   = @"C:\0Daten\CarDatabase.db";

            try
            {
                // FlightData Layer
                _FdataRead = SFDB_ReadF.CreateInstance(_dataSourcePath);
                _FdataRead.InitDb();
                _FdataWrite = SFDB_WriteF.CreateInstance(_dataSourcePath);
                _FdataWrite.InitDb();
                // ShipInfoData Layer
                _SdataRead = SFDB_ReadS.CreateInstance(_dataSourcePath);
                _SdataRead.InitDb();
                _SdataWrite = SFDB_WriteS.CreateInstance(_dataSourcePath);
                _SdataWrite.InitDb();

                // FlightLogic Layer
                _FlogicQueries  = FFactoryQueries.CreateInstance(_FdataRead);
                _FlogicCommands = FFactoryILogicCmds.CreateInstance(_FdataWrite);
                // FlightLogic Layer
                _SlogicQueries  = SFactoryISLogicQueries.CreateInstance(_SdataRead);
                _SlogicCommands = SFactoryISLogicCommands.CreateInstance(_SdataWrite);


                // CarPresentation Layer
                _dialog = SFactoryIDialog.CreateInstance(_FlogicQueries, _FlogicCommands, _SlogicQueries, _SlogicCommands);

                // Start the App
                _app = new Application();
                _app.Run(_dialog as Window);
            }
            catch (ApplicationException e)
            {
                MessageBox.Show(e.Message, "Fehler in der Anwendung 1", MessageBoxButton.OK, MessageBoxImage.Stop);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Fehler in der Anwendung 2", MessageBoxButton.OK, MessageBoxImage.Stop);
            }
            finally
            {
                if (_FdataRead != null)
                {
                    _FdataRead.CloseDb();
                }
                if (_FdataWrite != null)
                {
                    _FdataWrite.CloseDb();
                }
                if (_SdataRead != null)
                {
                    _SdataRead.CloseDb();
                }
                if (_SdataWrite != null)
                {
                    _SdataWrite.CloseDb();
                }
            }
        }
 internal CServiceOfferFlight(FILogicCmds logicCommands)
 {
     _logicCommands = logicCommands;
 }