var serviceProvider = services.BuildServiceProvider();
var myService = serviceProvider.GetService<IMyService>();
复制代码
ServiceProvider 类
ServiceProvider类实现了IServiceProvider接口,负责剖析服务实例。
public class ServiceProvider : IServiceProvider, IDisposable, IAsyncDisposable
{
public object GetService(Type serviceType)
{
// 内部实现略
}
}
复制代码
ServiceProviderEngine 类
ServiceProviderEngine类是DI容器的核心引擎,负责管理服务的创建和生命周期。
public abstract class ServiceProviderEngine
{
public abstract object GetService(Type serviceType);
}
复制代码
结论
ASP.NET Core的依赖注入框架通过Microsoft.Extensions.DependencyInjection.Abstractions提供了一套灵活且易于利用的DI机制。本文通过分析其核心接口和类,展示了默认DI容器的工作原理。通过这些知识,开辟者可以更好地利用依赖注入,进步应用程序的可维护性和可测试性。
附录:完备代码示例
public interface IMyService{ void DoSomething();}public class MyService : IMyService{ public void DoSomething() { Console.WriteLine("MyService is doing something."); }}public void ConfigureServices(IServiceCollection services){ services.AddTransient<IMyService, MyService>();}public class MyController : Controller