使用 Autofac 将许多参数传递给所有组件的构造函数



对不起,如果问题不正确,我是大三学生。

我有以下代码:

Class1 c1 = new Class1(DateTime.Today,
"123",
0,
new Class2("01001", @"E:ATMSZRegBASEREG2019.GDB", DateTime.Now, true) 
);
c1.Work();

如何使用Autofac进行制作?

在没有传递参数的情况下,我得到了这个:

var builder = new ContainerBuilder();
builder.RegisterType<Class2>().As<IClass2>(); 
var container = builder.Build();
var component = container.Resolve<Class1>();
component.Work();

您可以使用WithParameter方法在注册期间提供参数。

builder.RegisterType<Class1>()
.As<IClass1>()
.WithParameter("date", DateTime.Today)
.WithParameter("i", "123")
.WithParameter(
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(Class2) && pi.Name == "class2",
(pi, ctx) => ctx.Resolve<IClass2>()));

或使用 lambda 注册它们

builder.Register(ctx => new Class1(DateTime.Today, ..., ctx.Resolve<Class2>())
.As<IClass1>(); 

最新更新