【发布时间】:2017-01-15 02:58:58
【问题描述】:
在startup.cs中,我想定义一个扩展的ServiceProvider:它基本上包装了默认的IServiceProvider实现。
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;
}
}
在启动时,我可以看到每个具有“单例”生命周期的服务都会调用 GetService(太棒了!!) 但是,之后不再调用它,而是调用了默认的 ServiceProvider ...... 顺便说一句,如果我请求 IServiceProvider 的解析,这是我得到的原生的。
我希望我的 serviceProvider 完全替换本地的,并且每次都被调用。
我错过了什么吗??
【问题讨论】:
标签: dependency-injection asp.net-core .net-core