public static IConnection CreateConnection(AvailableConnection availableConnection, ConnectionSettings connectionSettings) { Type connectionType = Assembly.GetExecutingAssembly().GetTypes().SingleOrDefault(connection => string.Equals(connection.Name, availableConnection.ToString(), StringComparison.InvariantCultureIgnoreCase)); if (connectionType == null) { Log.Error("Connection: {@ConnectionType} doesn't exist in implementation list array", availableConnection.ToString()); throw new NotImplementedException($"Connection: {availableConnection.ToString()} doesn't exist in implementation list array"); } return((IConnection)Activator.CreateInstance(connectionType, connectionSettings)); }
public static TApi CreateApi <TApi>(AvailableConnection availableConnectionType, ConnectionSettings connectionSettings, Syntax syntax, bool autoConnect = true) where TApi : IApi { //Create Connection settings Type apiType = Assembly.GetAssembly(typeof(TApi)).GetTypes()?.SingleOrDefault(type => string.Equals(typeof(TApi).Name, type.Name, StringComparison.InvariantCultureIgnoreCase)); var connectionType = Assembly.GetAssembly(typeof(IConnection)).GetTypes().SingleOrDefault(type => string.Equals(availableConnectionType.ToString(), type.Name, StringComparison.InvariantCultureIgnoreCase)); Type connectionSettingsType = connectionType?.GetConstructors()?.FirstOrDefault()?.GetParameters() ?.SingleOrDefault(param => param.Name.Contains("Settings"))?.ParameterType; var connectionSettingsInstance = (ConnectionSettings)Activator.CreateInstance(connectionSettingsType, connectionSettings.EndPoint); IConnection connection = (IConnection)Activator.CreateInstance(connectionType, connectionSettings); if (autoConnect) { connection.OpenConnection(); } return((TApi)Activator.CreateInstance(apiType, connection, syntax)); }
public static IApi CreateApi(AvailableApi availableApi, AvailableConnection availableConnectionType, AvailableSyntax availableSyntax, ConnectionSettings connectionSettings, bool autoConnect = true) { Type apiType = Assembly.GetExecutingAssembly().GetTypes()?.SingleOrDefault(type => string.Equals(availableApi.ToString(), type.Name, StringComparison.InvariantCultureIgnoreCase)); Type syntaxType = Assembly.GetExecutingAssembly().GetTypes()?.SingleOrDefault(type => string.Equals(availableSyntax.ToString(), type.Name, StringComparison.InvariantCultureIgnoreCase)); Type connectionType = Assembly.GetAssembly(typeof(IConnection)).GetTypes().SingleOrDefault(type => string.Equals(availableConnectionType.ToString(), type.Name, StringComparison.InvariantCultureIgnoreCase)); IConnection connection = (IConnection)Activator.CreateInstance(connectionType, connectionSettings); Syntax syntax = (Syntax)Activator.CreateInstance(syntaxType); if (autoConnect) { connection.OpenConnection(); } return((IApi)Activator.CreateInstance(apiType, connection, syntax)); }