在ASP.NET Core中扩展服务实现的通用方法

时间:2017-12-05 17:38:25

标签: c# dependency-injection asp.net-core

如果您想利用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来查询服务。

是否有更好的方法?

0 个答案:

没有答案