【发布时间】:2017-03-30 03:06:38
【问题描述】:
我正在尝试使用 Autofac 创建一个“生成”工厂,它将根据枚举参数实时解决依赖关系。
给定以下接口/类:
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 生成某种工厂,该工厂有一个接收一个参数的方法:ConnectionType 并返回正确的连接对象。
我从以下注册开始:
builder.RegisterType<AutoFacConcepts.Engine.Engine>()
.As<IEngine>()
.InstancePerDependency();
builder.RegisterType<SshConnection>()
.As<IConnection>();
builder.RegisterType<TelnetConnection>()
.As<IConnection>();
然后我继续使用不同选项的 TelnetConnection/SshConnection 注册:
- 命名
- 键控
- 元数据
我找不到允许我定义生成的工厂委托的正确注册组合,该委托将返回正确的连接对象(用于 ConnectionType.Ssh 的 SshConnection 和用于 ConnectionType.Telnet 的 TelnetConnection)。
【问题讨论】: