我可以让IServiceProvider.GetService返回接口的实现

时间:2017-11-18 08:45:43

标签: c# .net-core

我有一个Dependancy Injection设置,我在其中注册一个名为func strategy(addr Addr) bool { if addr == ... { return true } return false } func main(){ addr := first(strategy) } 的服务,实现MyClass,如下所示:

MyInterface

然后我通过调用ServiceCollection.AddSingleton<MyClass>(); 上的扩展方法BuildServiceProvider创建一个IServiceProvider。

如何让ServiceCollection返回IServiceProvider.GetRequiredService<MyInterface>()的实例化单例实例?目前它返回null。

1 个答案:

答案 0 :(得分:1)

默认容器实现在注册为该接口返回实现时执行此操作:

ServiceCollection.AddSingleton<MyInterface, MyClass>();

这是注册服务的首选方式,因此需要它的所有组件都需要接口而不是实现。

其他容器实现(AutoFac)也支持自动注册已实现的接口(例如.AsImplementedInterfaces()),但上面的代码段被认为适用于支持ASP.NET Core DI抽象的所有容器。