删除ASP.Net核心dependency injection中的服务
在Asp.Net MVC Core(早期版本,版本1.0或1.1)中,dependency injection绑定在Startup.cs类中配置如下:
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddScoped(); // ... } }
在我的应用程序中,我通常有一个基本的Startup类,其中generics绑定被定义为这些行的序列:
public abstract class BaseStartup { public virtual void ConfigureServices(IServiceCollection services) { services.AddScoped(); services.AddScoped(); } }
然后在我的应用程序中,我inheritance了启动类,并注入了其他服务:
public class Startup : BaseStartup { public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); services.AddScoped(); services.AddScoped(); } }
我现在想知道:我怎样才能“覆盖”以前的绑定? 例如,我希望删除或修改基类中定义的绑定,如:
services.Remove(); // Doesn't exist services.AddScoped();
或者只是更新绑定:
services.AddScoped(replacePreviousBinding: true); // Doesn't exist either !
有没有办法做到这一点 ? 或者只是简单地声明一个与之前定义的绑定相同的接口的新绑定将覆盖该绑定?
您可以使用普通的集合API来删除您的服务:
services.AddScoped(); var serviceDescriptor = services.FirstOrDefault(descriptor => descriptor.ServiceType == typeof(IService)); services.Remove(serviceDescriptor);
您也可以创建扩展方法来实现相同的目的:
public static class ServiceCollectionExtensions { public static IServiceCollection Remove(this IServiceCollection services) { var serviceDescriptor = services.FirstOrDefault(descriptor => descriptor.ServiceType == typeof(T)); if (serviceDescriptor != null) services.Remove(serviceDescriptor); return services; } }
- ASP.NET Core是否支持RESTful Web API的JSON Web签名?
- 无法在web api控制器中遇到断点
- asp.net 5中的Windows身份validation
- 在MVC 6中,如何在视图中编码复选框列表并将选中的值传递给控制器?
- entity framework7 RC 1和ASP.NET MVC 6中的种子初始数据
- 如何使用Reflection或其他准确方法获取控制器内的当前ASP.NET核心控制器方法名称
- ASP NET 5使用单独程序集中的View组件进行本地化
- javascript版本(asp-append-version)如何在ASP.NET Core MVC中工作
- 如何在动作filter中获取当前模型