首页 > 解决方案 > 不能从父类外部访问基类方法?

问题描述

我想编写一个依赖提供者来注册我的依赖。我继承了 ServiceCollection 类,这意味着我应该获取该类中的所有方法,对吧?错了,好像是这样。

您可以看到,我继承它,使用this.关键字注册它,但没有它会出错。

public class DependencyProvider : ServiceCollection, IDependencyProvider
{
    public DependencyProvider() : base()
    {
        Register();
    }

    public void Register()
    {
        this.AddSingleton<ICoreContext, CoreContext>();
    }
}

调用AddSingletonwithoutthis.会抛出一个错误,说它找不到方法,同时添加this. 它按预期工作。如果我需要在类的实例上访问它怎么办?

这也意味着如果我想访问这个类之外的任何方法,我必须复制 DependencyProvider 类中的方法,这不是很有效。

这是IDependencyProvider界面

public interface IDependencyProvider : IServiceCollection
{
    void Register();
}

标签: c#.net

解决方案


就像我在这里回答你的,AddSingleton是关于扩展方法的IServiceCollection。这意味着如果您想在内部使用它,DependencyProvider您需要this.AddSingleton直接使用或引用该方法ServiceCollectionServiceExtensions.AddSingleton

在没有这个的情况下调用 AddSingleton。抛出一个错误,说它找不到方法,同时添加这个。它按预期工作。如果我需要在类的实例上访问它怎么办?

好吧,在这种情况下,您只需按预期使用它:

var myProvider = new DependencyProvider();
myProvider.AddSingleton<ICoreContext, CoreContext>();

推荐阅读