public static void Load() { Slaves = Slaves ?? new List <ISlave>(); var section = ConnectionSection.GetSection(); var servers = GetSection(); if (ReferenceEquals(servers, null)) { throw new ArgumentNullException(); } Slaves = new List <ISlave>(); for (int i = 0; i < servers.Count; i++) { AppDomain domain = AppDomain.CreateDomain(servers[i].ServiceType + i); var type = typeof(DomainLoader); var loader = (DomainLoader)domain.CreateInstanceAndUnwrap(Assembly.GetAssembly(type).FullName, type.FullName); var element = new ElementHelper { IpEndPoint = new IPEndPoint(IPAddress.Parse(servers[i].IpAddress), servers[i].Port), ServerType = servers[i].ServiceType }; var service = loader.LoadService(element); if (servers[i].ServiceType == "slave") { Slaves.Add(service as ISlave); } else if (servers[i].ServiceType == "master") { Master = service as MasterUserService; } else { throw new ArgumentException("Incorrect server type"); } } InitializeServices(); }