Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注入相同类型的多个实例-Autofac_C#_Autofac - Fatal编程技术网

C# 注入相同类型的多个实例-Autofac

C# 注入相同类型的多个实例-Autofac,c#,autofac,C#,Autofac,我试图在构造函数中注入同一类的多个实例。但是,在解决这些问题时,它们总是作为同一个实例进行解决。这是我的注册码: public Repository(Class1 class1, Class1 class2) { _class1 = class1; _class2 = class2; } builder.Register(ctx => new Class1()).Named<Class1>("a"); builder.Register(ctx => n

我试图在构造函数中注入同一类的多个实例。但是,在解决这些问题时,它们总是作为同一个实例进行解决。这是我的注册码:

public Repository(Class1 class1, Class1 class2)
{
    _class1 = class1;
    _class2 = class2;
}

builder.Register(ctx => new Class1()).Named<Class1>("a");

builder.Register(ctx => new Class1()).Named<Class1>("b");

builder.RegisterType<Repository>().WithParameters(new[]
{
    new ResolvedParameter((p, c) => p.Name == "a", (p, c) => c.ResolveNamed<Class1>("a")),
    new ResolvedParameter((p, c) => p.Name == "b", (p, c) => c.ResolveNamed<Class1>("b"))
}).AsImplementedInterfaces();
公共存储库(1类、1类、2类)
{
_class1=class1;
_类别2=类别2;
}
builder.Register(ctx=>newclass1())。命名为(“a”);
builder.Register(ctx=>newclass1())。命名为(“b”);
builder.RegisterType().WithParameters(新[]
{
新的ResolvedParameter((p,c)=>p.Name==“a”,(p,c)=>c.ResolveNamed(“a”),
新的ResolvedParameter((p,c)=>p.Name==“b”,(p,c)=>c.ResolveNamed(“b”))
}).a实现接口();

但是,当我这样做时,我会在存储库中得到与Class1相同的实例。

什么是
Class1
,它真的应该被注入吗?它们为什么被注入?!获取凭据的位置构成了业务逻辑的一部分。注入不适用于业务逻辑。通过使用注入,您可以隐藏有关应用程序工作方式的关键信息。注射是为了隐藏管道…想象一下这是个好主意!!。。。。我只是想知道是否可以用Autofac完成,如果可以的话,如何进行。如果没有更具体的理由说明您的要求,我只能建议您可以在哪里查找。尽管如此,请尝试查看此处的代码。我认为您犯了一个很大的可维护性错误。在发布的代码片段中,存储库ctor参数是“class1”和“class2”-但是ResolvedParameters是“a”和“b”。他们必须匹配。