public DependencyRegistry(ServiceConfiguration serviceConfiguration) { var repositoryFactory = new RepositoryFactory(serviceConfiguration.DatabaseConfiguration, serviceConfiguration.DataDirectory); For<IAccountRepository>().Use(() => repositoryFactory.CreateAccountRepository()); For<IMessageRepository>().Use(() => repositoryFactory.CreateMessageRepository()); For<IFolderRepository>().Use(() => repositoryFactory.CreateFolderRepository()); For<IDnsClient>().Use<DnsClient>(); For<ILog>().Use<Log>(); }
public static ServiceConfiguration Read() { string installLocation; using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)) using (var subKey = baseKey.OpenSubKey("SOFTWARE\\hMailServer")) { if (subKey == null) throw new InvalidOperationException("Unable to locate SOFTWARE\\hMailServer registry key"); installLocation = (string) subKey.GetValue("InstallLocation", string.Empty, RegistryValueOptions.None); } var binDirectory = Path.Combine(installLocation, "Bin"); var inifilePath = Path.Combine(binDirectory, "hMailServer.ini"); var iniFile = new IniFile(inifilePath); var databaseType = iniFile.Read("Database", "Type"); var serviceConfiguration = new ServiceConfiguration(); switch (databaseType.ToLowerInvariant()) { case "mysql": { var username = iniFile.Read("Database", "Username"); var password = iniFile.Read("Database", "Password"); uint port = uint.Parse(iniFile.Read("Database", "Port")); var server = iniFile.Read("Database", "Server"); var database = iniFile.Read("Database", "Database"); serviceConfiguration.DatabaseConfiguration = new DatabaseConfiguration { Database = database, Password = password, Port = port, Server = server, Username = username }; break; } default: throw new NotImplementedException(string.Format("Database type {0} is not supported.", databaseType)); } serviceConfiguration.TempDirectory = iniFile.Read("Directories", "TempFolder"); serviceConfiguration.DataDirectory = iniFile.Read("Directories", "DataFolder"); return serviceConfiguration; }