gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:00:39 25 4
gpt4 key购买 nike

我对 autofac 很陌生,所以我可能完全滥用了它。

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

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

我有两个使用该类的类,但构造函数需要不同的默认值。第二个构造函数仅用于测试目的——我们总是希望在“真实”应用程序中有一个 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();
}
}

我的问题:

  1. 当我在 DoesSomething 或 DoesSomethignElse 上调用 resolve 时——它会解析内部构造函数而不是公共(public)构造函数吗?我需要不注册 IHelperClass 吗?
  2. 如果是,我如何让它根据它是在 DoesSomething 还是 DoesSomethingElse 中使用,将不同的参数传递给 IHelperClass 的每个实例?

最佳答案

您始终可以使用 WithParameter 方法显式指定构造函数参数:

builder.RegisterType<DoesSomething>()
.As<IDoesSomething>()
.WithParameter("helper", new HelperClass("do", "something"));

builder.RegisterType<DoesSomethingElse>()
.As<IDoesSomethingElse>()
.WithParameter("helper", new HelperClass("do", "somethingelse"));

据我所知,HelperClass 不需要接口(interface),因为它本质上只是一个值持有者。

我认为,要实现这一点,您需要公开内部构造函数。

关于c# - 使用 Autofac 将参数传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9066200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com