public TransportplanungKomponenteFacade(IPersistenceServices persistenceService, ITransactionServices transactionService, IAuftragServicesFürTransportplanung auftragServices, IUnterbeauftragungServicesFürTransportplanung unterbeauftragungServices, ITransportnetzServicesFürTransportplanung transportnetzServices, ITimeServices timeServices)
        {
            Check.Argument(persistenceService != null, "persistenceService != null");
            Check.Argument(transactionService != null, "transactionService != null");
            Check.Argument(auftragServices != null, "auftragServices != null");
            Check.Argument(unterbeauftragungServices != null, "unterbeauftragungsServices != null");
            Check.Argument(transportnetzServices != null, "transportnetzServices != null");

            this.transactionService = transactionService;
            this.auftragServices = auftragServices;
            this.tp_REPO = new TransportplanRepository(persistenceService);
            this.tpK_BL = new TransportplanungKomponenteBusinessLogic(tp_REPO, transactionService, auftragServices, unterbeauftragungServices, transportnetzServices, timeServices);
        }
        public TransportplanungKomponenteBusinessLogic(TransportplanRepository tp_REPO, ITransactionServices transactionService, IAuftragServicesFürTransportplanung auftragServices, IUnterbeauftragungServicesFürTransportplanung unterbeauftragungServices, ITransportnetzServicesFürTransportplanung transportnetzServices, ITimeServices timeServices)
        {
            Check.Argument(tp_REPO != null, "tp_REPO != null");
            Check.Argument(transactionService != null, "transactionService != null");
            Check.Argument(auftragServices != null, "auftragServices != null");
            Check.Argument(unterbeauftragungServices != null, "unterbeauftragungsServices != null");
            Check.Argument(transportnetzServices != null, "transportnetzServices != null");
            Check.Argument(timeServices != null, "timeServices != null");

            this.tp_REPO = tp_REPO;
            this.transactionService = transactionService;
            this.auftragServices = auftragServices;
            this.unterbeauftragungServices = unterbeauftragungServices;
            this.transportnetzServices = transportnetzServices;
            this.timeServices = timeServices;
            this.planungsQueue = new BackgroundQueue();
        }
        /// <summary>
        /// Initializiere Schnittstellen der Komponenten
        /// </summary>
        private static void Init()
        {
            PersistenceServicesFactory.CreateSimpleMySQLPersistenceService(out persistenceService, out transactionService);

            var timeServicesMock = new Mock<ITimeServices>();
            //// Wir müssen einen fixen Zeitpunkt simulieren, ansonsten sind bei der Ausführung/Planung evtl. die Verträge oder Angebote abgelaufen
            timeServicesMock.Setup(ts => ts.Now).Returns(DateTime.Parse("31.08.2013 12:00"));

            auftragServices = new AuftragKomponenteFacade(persistenceService, transactionService, timeServicesMock.Object);

            unterbeauftragungServicesFuerBuchhaltung = new UnterbeauftragungKomponenteFacade(persistenceService, transactionService, frachtfuehrerServicesFuerUnterbeauftragung);
            bankServicesFuerBuchhaltung = new BankAdapterFacade();
            geschaeftspartnerServices = new GeschaeftspartnerKomponenteFacade(persistenceService, transactionService);
            IPDFErzeugungsServicesFuerBuchhaltung pDFErzeugungsServicesFuerBuchhaltung = new PDFErzeugungKomponenteFacade(geschaeftspartnerServices as IGeschaeftspartnerServicesFuerPDFErzeugung); 
            frachtfuehrerServicesFuerUnterbeauftragung = new FrachtfuehrerAdapterFacade(ref buchhaltungsServices);
            unterbeauftragungServices = new UnterbeauftragungKomponenteFacade(persistenceService, transactionService, frachtfuehrerServicesFuerUnterbeauftragung);
            buchhaltungsServices = new BuchhaltungKomponenteFacade(
                persistenceService,
                transactionService,
                unterbeauftragungServicesFuerBuchhaltung,
                bankServicesFuerBuchhaltung,
                transportplanungServicesFuerAuftrag as ITransportplanServicesFuerBuchhaltung,
                auftragServices as IAuftragServicesFuerBuchhaltung,
                geschaeftspartnerServices,
                pDFErzeugungsServicesFuerBuchhaltung);

            auftragServicesFürTransportplanung = new AuftragKomponenteFacade(persistenceService, transactionService, timeServicesMock.Object);
            transportnetzServicesFuerTransportplanung = new TransportnetzKomponenteFacade();
            unterbeauftragungServicesFürTransportplanung = new UnterbeauftragungKomponenteFacade(persistenceService, transactionService, frachtfuehrerServicesFuerUnterbeauftragung);
            transportplanungServicesFuerAuftrag = new TransportplanungKomponenteFacade(
                persistenceService,
                transactionService,
                auftragServicesFürTransportplanung,
                unterbeauftragungServicesFürTransportplanung,
                transportnetzServicesFuerTransportplanung,
                timeServicesMock.Object);
            auftragServicesFürTransportplanung = new AuftragKomponenteFacade(persistenceService, transactionService, timeServicesMock.Object);
            transportnetzServices = new TransportnetzKomponenteFacade();
            transportnetzServicesFürTransportplanung = new TransportnetzKomponenteFacade();
            transportplanungServices = new TransportplanungKomponenteFacade(persistenceService, transactionService, auftragServicesFürTransportplanung, unterbeauftragungServicesFürTransportplanung, transportnetzServicesFuerTransportplanung, timeServicesMock.Object);
        }