c# – 使用Autofac将参数传递给构造函数

我对autofac很新,所以我可能完全滥用它。

假设我有一个类有这样的结构:

public class HelperClass : IHelperClass
{
     public HelperClass(string a, string b)
     {
         this.A = a;
         this.B = b;
     }
}

我有两个类使用该类,但对构造函数需要不同的默认值。第二个构造函数是JUST用于测试目的 – 我们将永远需要一个HelperClass在“真实”应用程序中:

public class DoesSomething: IDoesSomething
{
     public DoesSomething()
         : this(new HelperClass("do", "something"));
     {

     }

     internal DoesSomething(IHelperClass helper)
     {
          this.Helper = helper;
     }
}

public class DoesSomethingElse : IDoesSomethingElse
{
     public DoesSomethingElse()
         : this(new HelperClass("does", "somethingelse"));
     {

     }

     internal DoesSomethingElse(IHelperClass helper)
     {
          this.Helper = helper;
     }
}

这是我的AutoFac模块:

public class SomethingModule: Module
{
    protected override void Load(ContainerBuilder builder)
    {
         builder.RegisterType<DoesSomething>().As<IDoesSomething>();
         builder.RegisterType<DoesSomethingElse>().As<IDoesSomethingElse();
    }
}

我的问题:

>当我在DoesSomething或DoesSomethignElse上调用resolve时 – 它会解析内部构造函数而不是公共的构造函数吗?我需要离开IHelperClass吗?
>如果是,如何使它通过不同的参数到IHelperClass的每个实例,这取决于它是否用于在IsSomething或DoesSomethingElse?

Autofac不使用非公共构造函数。默认情况下,它只发现公共的,只看不到其他的。除非你使用.FindConstructorsWith(BindingFlags.NonPublic),否则它只会看到公共构造函数。因此,您的方案应按照您期望的方式工作。
http://stackoverflow.com/questions/9066200/passing-parameters-to-constructors-using-autofac

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 使用Autofac将参数传递给构造函数