如果您想利用ISomeService
的默认实现功能并添加自定义逻辑,最流行的方法是继承默认实现类,如下所示:
public class CustomService : DefaultService
{
public override Something ProvideSomething(SomeOptions options) =>
someCondition ? customSomething : base.ProvideSomething(options);
}
不幸的是,某些类存在问题,因为它们没有使我想覆盖虚拟的所有方法。
如此实施责任链模式会很好:
public class CustomService : ISomeService
{
private ISomeService _next;
public CustomService(ISomeService next) => _next = next;
public Something ProvideSomething(SomeOptions options) =>
someCondition ? customSomething : _next.ProvideSomething(options);
}
但是,使用默认的ASP.NET Core DI容器,同时注册新版本的服务并获取旧版本是很麻烦的。我能想到的唯一方法是在添加新版本之前构建一个临时的IServiceProvider来查询服务。
是否有更好的方法?