在依赖注入容器中,可以在应用程序中有一个位置,在其中定义什么协定映射到哪个特定的实现上,还可以指定是应该将服务作为一个单例来使用,还是应该在每次使用时创建一个新实例。
在下一个示例中,使用前面创建的GreetingService来实现IGreetingService和HomeController类,但这次我们使用依赖注入容器。
示例WithDIContainer使用了如下NuGet包和名称空间:
包
Microsoft.Extensions.DependencyInjection
名称空间
System
Microsoft.Extensions.DependencyInjection
在Program类中,现在定义RegisterServices方法。在这里,实例化一个新的ServiceCollection对象。在添加了NuGet包Microsoft.Extensions.DependencyInjection之后,ServiceCollection就在名称空间Microsoft.Extensions.DependencyInjection中定义。使用AddSingleton和AddTransient时,ServicceCollection的扩展方法用来注册DI容器需要知道的类型。在示例应用程序中,GreetingService和HomeController都在容器中注册,这允许从容器中检索HomeController。
当请求IGreetingService接口时,会实例化GreetingService类。HomeController本身没有实现接口。通过这个DI容器设置,当请求HomeController时,会实例化HomeController。DI容器配置还定义了服务的生命周期。对于GreetingService,请求IGreetingService时总是返回相同的实例。这和Ho