首页 > 其他 > 详细

源码分析——服务提供之三种获取实例的区别

时间:2021-01-06 09:08:18      阅读:19      评论:0      收藏:0      [点我收藏+]
如果服务未注册则GetService()返回null,GetRequiredService()而是抛出异常。
public static T GetService<T>(this IServiceProvider provider)
{
    if (provider == null)
    {
        throw new ArgumentNullException(nameof(provider));
    }

    return (T)provider.GetService(typeof(T));
}
public static object GetRequiredService(this IServiceProvider provider, Type serviceType)
{
    if (provider == null)
    {
        throw new ArgumentNullException(nameof(provider));
    }

    if (serviceType == null)
    {
        throw new ArgumentNullException(nameof(serviceType));
    }

    var requiredServiceSupportingProvider = provider as ISupportRequiredService;
    if (requiredServiceSupportingProvider != null)
    {
        return requiredServiceSupportingProvider.GetRequiredService(serviceType);
    }

    var service = provider.GetService(serviceType);
    if (service == null)
    {
        throw new InvalidOperationException(Resources.FormatNoServiceRegistered(serviceType));
    }

    return service;
}
技术分享图片
public static T GetRequiredService<T>(this IServiceProvider provider)
{
    if (provider == null)
    {
        throw new ArgumentNullException(nameof(provider));
    }

    return (T)provider.GetRequiredService(typeof(T));
}
GetRequiredService

 

源码分析——服务提供之三种获取实例的区别

原文:https://www.cnblogs.com/sunpan/p/14238805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!