/// <summary>
        /// Basic constructor
        /// </summary>
        /// <param name="description">The adapter description. The first address in  the Addressed field is used for hosting the server.</param>
        /// <param name="mmiRegisterAddress">The address of the register (where all services, adapters and mmus are registered)</param>
        /// <param name="mmuPath">The path where the MMUs are located</param>
        /// <param name="mmuProvider">A class which provides information regarding the available MMUs</param>
        /// <param name="mmuInstantiatior">A class which can instantiate MMUs based on the file and description</param>
        /// <param name="customAdapterImplementation">An optionally specified customAdapterImplementation which is utilized instead of the default one</param>
        public AdapterController(SessionData sessionData, MAdapterDescription description, MIPAddress mmiRegisterAddress, IMMUProvider mmuProvider, IMMUInstantiation mmuInstantiatior, MMIAdapter.Iface customAdapterImplementation = null)
        {
            //Assign the session data
            this.SessionData = sessionData;

            //Is the default implementation if not explicitly set
            if (customAdapterImplementation == null)
            {
                this.adapterImplementation = new ThriftAdapterImplementation(sessionData, mmuInstantiatior);
            }
            else
            {
                this.adapterImplementation = customAdapterImplementation;
            }

            //Assign the adapter implementation instance
            SessionData.AdapterInstance = this.adapterImplementation;

            //Assign the mmu instantiator
            this.mmuInstantiator = mmuInstantiatior;
            this.mmuProvider     = mmuProvider;

            //Assign the adapter description
            this.adapterDescription        = description;
            SessionData.AdapterDescription = description;

            //Assign the addresses
            this.address            = description.Addresses[0];
            this.mmiRegisterAddress = mmiRegisterAddress;

            //Assign the MMI register address
            SessionData.MMIRegisterAddress = mmiRegisterAddress;

            //Register on changed event
            this.mmuProvider.MMUsChanged += MmuProvider_MMUsChanged;
        }
 /// <summary>
 /// Basic constructor
 /// </summary>
 public ThriftAdapterImplementation(SessionData sessionData, IMMUInstantiation mmuInstantiator)
 {
     this.SessionData     = sessionData;
     this.mmuInstantiator = mmuInstantiator;
 }