Dependency injection 并不总是使用自定义iServiceVider
在startup.cs中,我想定义一个扩展的ServiceProvider:它基本上包装了默认的IServiceProvider实现Dependency injection 并不总是使用自定义iServiceVider,dependency-injection,asp.net-core,.net-core,Dependency Injection,Asp.net Core,.net Core,在startup.cs中,我想定义一个扩展的ServiceProvider:它基本上包装了默认的IServiceProvider实现 public IServiceProvider ConfigureServices(IServiceCollection services) { [...] var servicesProvider = services.BuildExtendedServiceProvider(); return servicesProvider; } 下面是
public IServiceProvider ConfigureServices(IServiceCollection services)
{
[...]
var servicesProvider = services.BuildExtendedServiceProvider();
return servicesProvider;
}
下面是核心的扩展服务提供者实现
/// <summary>
/// Extends the native asp.net service provider
/// </summary>
public class ExtendedServicesProvider : IServiceProvider
{
private readonly IServiceProvider _serviceProvider;
/// <summary>
/// Creates a new instance of <see cref="ExtendedServicesProvider"/> provider based on the native mvc <see cref="IServiceProvider"/>
/// </summary>
/// <param name="serviceProvider"></param>
public ExtendedServicesProvider(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
/// <inheritDoc />
public object GetService(Type serviceType)
{
var resolvedService = _serviceProvider.GetService(serviceType);
[...]
return resolvedService;
}
}
//
///扩展本机asp.net服务提供程序
///
公共类扩展服务提供程序:IServiceProvider
{
私有只读服务器ViceProvider\u服务提供商;
///
///基于本机mvc创建提供程序的新实例
///
///
公共扩展服务提供者(IServiceProvider服务提供者)
{
_服务提供者=服务提供者;
}
///
公共对象GetService(类型serviceType)
{
var resolvedService=\u serviceProvider.GetService(serviceType);
[...]
返回解析服务;
}
}
在启动时,我可以看到对每个具有“单例”生命周期的服务调用GetService(太棒了!!)
但是,此后不再调用它,而是调用默认的ServiceProvider。。。
顺便说一下,如果我请求IServiceProvider的解析,这是我得到的本地解析
我希望我的服务提供商完全替换本地服务提供商,并且每次都会被调用
我遗漏了什么吗?好的,我只是检查了源代码(我应该在发布问题之前检查一下,对不起)。 构建方法本身将IServiceProvider类型添加到本机实例中。 因为似乎没有办法正确地修改它(不考虑“_table”字段,我的意思是:-)。在我看来,这种方法显然不好 我想我会尝试其他依赖注入引擎,比如Autofac,但我真的想保留我认为非常轻的本机引擎