private uint Initialize(Assembly ConsumerAssembly, uint ApiVersion)
        {
            // locate IDhcpServerCalloutConsumer
            var consumer = ConsumerAssembly.GetTypes()
                           .Where(t =>
                                  typeof(ICalloutConsumer).IsAssignableFrom(t) &&
                                  !t.IsValueType &&
                                  !t.IsAbstract &&
                                  t.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null) != null)
                           .FirstOrDefault();

            if (consumer == null)
            {
                return(0xBU); // assembly does not implement consumer
            }
            consumerInstance = (ICalloutConsumer)Activator.CreateInstance(consumer);

            if (consumerInstance is INewPacket newPacketHandler)
            {
                this.newPacketHandler = newPacketHandler;
            }

            if (consumerInstance is IPacketDrop packetDropHandler)
            {
                this.packetDropHandler = packetDropHandler;
            }

            if (consumerInstance is IPacketSend packetSendHandler)
            {
                this.packetSendHandler = packetSendHandler;
            }

            if (consumerInstance is IAddressDelete addressDeleteHandler)
            {
                this.addressDeleteHandler = addressDeleteHandler;
            }

            if (consumerInstance is IAddressOffer addressOfferHandler)
            {
                this.addressOfferHandler = addressOfferHandler;
            }

            if (consumerInstance is IHandleOptions handleOptionsHandler)
            {
                this.handleOptionsHandler = handleOptionsHandler;
            }

            if (consumerInstance is IDeleteClient deleteClientHandler)
            {
                this.deleteClientHandler = deleteClientHandler;
            }

            // call consumer initialize
            consumerInstance.Initialize((int)ApiVersion);

            return(0x0U); // ERROR_SUCCESS
        }
 public ClientsController(
     IGetClients getClients,
     IGetClientById getClientById,
     IUpsertClient upsertClient,
     IDeleteClient deleteClient)
 {
     this.getClients      = getClients;
     this.getClientById   = getClientById;
     this.upsertClient    = upsertClient;
     this.deleteClient    = deleteClient;
     this.createValidator = new CreateClientModelValidator();
     this.updateValidator = new UpdateClientModelValidator();
 }