-1
问题是相当基本的,我刚开始使用Autofac,遇到Autofac无法正常工作的问题,因为我预计它可以正常工作。因此,鉴于“这是它的工作方式”,我想了解这种行为背后的逻辑。 这是非常基本的代码:Autofac和键控注册 - 正确的行为?
public interface X { }
internal class A : X { }
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<A>().Keyed<X>("A");
ILifetimeScope scope = builder.Build();
try
{
var instance = scope.Resolve<X>();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
解决会导致错误(异常)的尝试。 但是为什么? 事实上,我并没有要求解决具体键控,呼吁
var instance = scope.ResolveKeyed<X>("A");
将工作和解决象预期的那样好,如果我注册
builder.RegisterType<A>().Keyed<X>("A").As<X>();
但为什么不作为,如果我没有解决任何问具体键? 我的意思是我希望的逻辑 - 我要求具体 - 决心具体,如果我没有要求具体 - 决心任何/最后注册。
那么为什么这种行为被选为默认值。
是的,我明白,问题是“为什么”,这种方法背后的逻辑或意识形态。 – TheLordkiron
因此,您可以拥有无法解密的密钥服务,而且您也可以拥有无需密钥即可解析的密钥服务,由您决定如何配置它。根据定义,“键控”服务需要密钥。 '作为'(无键)服务不。就是这样,因为这就是API的设计。不管你想要什么,你都可以设置你的服务。我们在这里拥有密钥服务,我们不*不希望在没有密钥的情况下解析。 – Amy
你看我之所以问的原因是我有3个接口,用不同的密钥注册键和一个没有密钥注册的场景,我希望在IIndex