Я пытаюсь создать с Autofac 'сгенерированный' factory, который будет разрешать зависимости в режиме реального времени на основе параметра enum.
Учитывая следующие интерфейсы/классы:
public delegate IConnection ConnectionFactory(ConnectionType connectionType);
public enum ConnectionType
{
    Telnet,
    Ssh
}
public interface IConnection
{
    bool Open();
}
public class SshConnection : ConnectionBase, IConnection
{
    public bool Open()
    {
        return false;
    }
}
public class TelnetConnection : ConnectionBase, IConnection
{
    public bool Open()
    {
        return true;
    }
}
public interface IEngine
{
    string Process(ConnectionType connectionType);
}
public class Engine : IEngine
{
    private ConnectionFactory _connectionFactory;
    public Engine(ConnectionFactory connectionFactory)
    {
        _connectionFactory = connectionFactory;
    }
    public string Process(ConnectionType connectionType)
    {
        var connection = _connectionFactory(connectionType);
        return connection.Open().ToString();
    }
}
Я хотел бы использовать Autofac для создания своего рода factory, у которого есть метод, который получает один параметр: ConnectionType и возвращает правильный объект соединения.
Я начал со следующих регистраций:
builder.RegisterType<AutoFacConcepts.Engine.Engine>()
    .As<IEngine>()
    .InstancePerDependency();
builder.RegisterType<SshConnection>()
    .As<IConnection>();
builder.RegisterType<TelnetConnection>()
    .As<IConnection>();
Затем я продолжал играть с регистрацией TelnetConnection/SshConnection с различными параметрами:
- Названа
- Keyed
- Метаданные
Я не смог найти правильную комбинацию регистраций, которая позволит мне определить сгенерированный делегат factory, который вернет правильный объект соединения (SshConnection для ConnectionType.Ssh и TelnetConnection для ConnectionType.Telnet).
