-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