C# .NETCore2.1中单例注入方法的差异
这些注射方法有什么区别C# .NETCore2.1中单例注入方法的差异,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,这些注射方法有什么区别 services.TryAdd(ServiceDescriptor.Singleton<IMyClass, MyClass>()); services.AddSingleton<IMyClass, MyClass>(); services.TryAdd(servicescriptor.Singleton()); services.AddSingleton(); 无论如何都将注册IMyClass,即使已经有不同的注册,例如。这将导致两次IMyC
services.TryAdd(ServiceDescriptor.Singleton<IMyClass, MyClass>());
services.AddSingleton<IMyClass, MyClass>();
services.TryAdd(servicescriptor.Singleton());
services.AddSingleton();
无论如何都将注册IMyClass
,即使已经有不同的注册,例如
。这将导致两次IMyClass
注册
当使用provider.GetService
/provider.getRequiredService
或注入IMyClass
与IEnumerable
时,就会出现差异
使用provider.GetService
/provider.getRequiredService
或injectionIMyClass
时,将使用最后一次注册(如果错误,请更正我,在quick上找不到参考/GitHub问题)
所以如果你有
services.AddSingleton<IMyClass, DefaultMyClass>();
services.AddSingleton<IMyClass, MyClass>();
将返回DefaultMyClass
,因为
不会被注册
另一方面,当您使用provider.GetServices(…)
(注意复数版本,末尾有一个s)或injectIEnumerable
,那么在使用
services.AddSingleton<IMyClass, DefaultMyClass>();
services.AddSingleton<IMyClass, MyClass>();
services.AddSingleton();
services.AddSingleton();
您可以对它们进行迭代。您看过文档了吗?有没有什么地方不清楚它们的用法,你需要澄清一下?我找不到它们的区别@SamiKuhmonen?
services.AddSingleton<IMyClass, DefaultMyClass>();
services.AddSingleton<IMyClass, MyClass>();
services.AddSingleton<IMyClass, DefaultMyClass>();
services.TryAdd(ServiceDescriptor.Singleton<IMyClass, MyClass>());
services.AddSingleton<IMyClass, DefaultMyClass>();
services.AddSingleton<IMyClass, MyClass>();