【发布时间】:2022-04-04 23:27:47
【问题描述】:
命名/键控解析是否也使用名称解析子依赖项?或者命名解析只对没有子依赖的解析类型应用名称/密钥?
发生错误:
在“ConsoleApplication1.Program+MainClassOne”类型上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的任何构造函数都不能使用可用的服务和参数调用: 无法解析构造函数“Void .ctor(INamed)”的参数“INamed named”。
class Program
{
static void Main(string[] args)
{
var container = new ContainerBuilder();
container.RegisterType<NamedB>().Named<INamed>("B");
container.RegisterType<NamedA>().Named<INamed>("A");
container.RegisterType<MainClassOne>().Named<MainClassOne>("A");
container.RegisterType<MainClassTwo>().Named<MainClassTwo>("B");
var di = container.Build();
var a = di.ResolveNamed<MainClassTwo>("B");
var a2 = di.ResolveNamed<MainClassOne>("A");
}
public class MainClassOne
{
public MainClassOne(INamed named)
{
Console.WriteLine("MainClassOne= " + named.Name);
}
}
public class MainClassTwo
{
public MainClassTwo(INamed named)
{
Console.WriteLine("MainClassTwo= " + named.Name);
}
}
public interface INamed
{
string Name { get; set; }
}
public class NamedA : INamed
{
public string Name
{
get { return "A"; }
set { }
}
}
public class NamedB : INamed
{
public string Name
{
get { return "B"; }
set { }
}
}
}
【问题讨论】:
-
很遗憾,但似乎只适用于已解决的类型。我检查“WithParameter”及其仅适用于特定类。我认为它的autofac政策。虽然他们可以制作一个参数来传播到子依赖项