public ClusterConfigurator Assemblies(params Assembly[] assemblies)
        {
            Requires.NotNull(assemblies, nameof(assemblies));

            if (assemblies.Length == 0)
            {
                throw new ArgumentException("Assemblies length should be greater than 0", nameof(assemblies));
            }

            foreach (var assembly in assemblies)
            {
                if (this.assemblies.Contains(assembly))
                {
                    throw new ArgumentException($"Assembly {assembly.FullName} has been already registered");
                }

                this.assemblies.Add(assembly);
            }

            foreach (var type in assemblies.SelectMany(x => x.ActorTypes()))
            {
                var mapping = ActorInterfaceMapping.Of(type);
                if (!interfaces.Add(mapping))
                {
                    throw new ArgumentException($"Actor type '{mapping.Name}' has been already registered");
                }
            }

            return(this);
        }
        internal ClientConfigurator ActorTypes(params string[] types)
        {
            Requires.NotNull(types, nameof(types));

            if (types.Length == 0)
            {
                throw new ArgumentException("types array is empty", nameof(types));
            }

            foreach (var type in types)
            {
                if (!interfaces.Add(ActorInterfaceMapping.Of(type)))
                {
                    throw new ArgumentException($"Actor type '{type}' has been already registered");
                }
            }

            return(this);
        }