我有以下课程:
public class Errors
{
private readonly string _connectionString;
public Errors(string connectionString)
{
_connectionString = connectionString;
}
}
我正在尝试使用Autofac进行注册:
builder.RegisterType<Errors>().WithParameter("connectionString", System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);
此对象被注入另一个对象,但它始终为null。进一步查看异常,将显示以下错误消息:
Cannot choose between multiple constructors with equal length 1 on type 'System.String'.
Select the constructor explicitly, with the UsingConstructor() configuration method, when the component is registered.
我尝试使用UsingConstructor和WithParameter进行注册,但没有任何变化。
答案 0 :(得分:4)
试试这个,有2种注册方式
第一次输入:
builder.Register(c => new Errors(System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString)).InstancePerLifetimeScope();
第二种类型:
public class Errors
{
private string _connectionString{ get; set; }
public Errors(string connectionString)
{
_connectionString = connectionString;
}
}
如下所示注册
builder.RegisterType<Errors>().WithParameter("connectionString", System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);
编辑:测试
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.Register(c => new Errors(ConfigurationManager.ConnectionStrings["myConn"].ConnectionString)).InstancePerLifetimeScope(); // Type 1
// builder.RegisterType<Errors>().WithParameter("connectionString", ConfigurationManager.ConnectionStrings["myConn"].ConnectionString); // Type 2
var container = builder.Build();
var objErrors = container.Resolve<Errors>();
}
}
配置文件看起来像
<connectionStrings>
<add name="myConn" connectionString="Some Connection String"/>
</connectionStrings>
请阅读此Autofac Wiki
在Autofac版本中测试:2.6.1.841
<强>结果强>: