注入具有多个相同类型参数的构造函数

时间:2016-02-21 02:42:25

标签: c# autofac

我使用autofac作为DI容器。 我的目标是将参数store注入构造函数中。 这就是我的构造函数的样子。

public SomeClass (IMyCouchStore store)
{
    this.store = store;
} 

store参数需要两个字符串参数才能实例化:

// sample instantiation
var store = new MyCouchStore("http://someUri","someDbName");

我尝试在引导过程中注册这两个参数:

builder
    .RegisterType<MyCouchStore>()
    .As<IMyCouchStore>()
    .WithParameters(new [] {
        new NamedParameter("dbUri","http://someUri"),
        new NamedParameter("dbName","someDbName")
    }

但是,我收到以下错误:

Autofac.Core.DependencyResolutionException

无法在类型&#39; MyCouch.MyCouchStore&#39;中选择长度相等的多个构造函数。在注册组件时,使用UsingConstructor()配置方法显式选择构造函数。

如何注入多个相同类型的参数?

1 个答案:

答案 0 :(得分:4)

你的答案在你的问题中:)

  

使用UsingConstructor()配置方法显式选择构造函数。

public MyCouchStore(string httpSomeuri, string somedbname)
{
    this.SomeUri = httpSomeuri;
    this.SomeDbName = somedbname;
}
builder.RegisterType<MyCouchStore>()
    .As<IMyCouchStore>()
    .UsingConstructor(typeof (string), typeof (string))
    .WithParameters(new[] 
    {
        new NamedParameter("httpSomeuri", "http://someUri"),
        new NamedParameter("somedbname",  Guid.NewGuid().ToString())
    });