ASP.NET Core DependencyResolver

后端 未结 7 756
故里飘歌
故里飘歌 2020-12-15 19:20

In ASP.NET MVC 5 is possible to obtain some dependency through DependencyResolver.Current.GetService(). Is there something similar in ASP.NET Core?

7条回答
  •  忘掉有多难
    2020-12-15 19:55

    If you really need it, you can write own one. First - create AppDependencyResolver class.

    public class AppDependencyResolver
    {
        private static AppDependencyResolver _resolver;
    
        public static AppDependencyResolver Current
        {
            get
            {
                if (_resolver == null)
                    throw new Exception("AppDependencyResolver not initialized. You should initialize it in Startup class");
                return _resolver;
            }
        }
    
        public static void Init(IServiceProvider services)
        {
            _resolver = new AppDependencyResolver(services);
        }
    
        private readonly IServiceProvider _serviceProvider;
    
        public object GetService(Type serviceType)
        {
            return _serviceProvider.GetService(serviceType);
        }
    
        public T GetService()
        {
            return _serviceProvider.GetService();
        }
    
        private AppDependencyResolver(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }
    } 
    

    Please note that _serviceProvider.GetService(); only available if you add using Microsoft.Extensions.DependencyInjection;. That namespace will be available if you add "Microsoft.Extensions.DependencyInjection": "1.0.0" to your project.json. Than you should call Init method in your startup class. For example

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            AppDependencyResolver.Init(app.ApplicationServices);
            //all other code
    

    After that you can use it anywhere, same as DependencyResolver.Current. But my suggestion - use it only if no other choice left.

提交回复
热议问题