我一直在通过程序类将依赖项注册到我的IOC容器中,但是它很混乱。我决定写一个DI提供程序,在其中提供并注册依赖项。

在我开始用代码解释之前,这是VS给的完整编译错误。


  “ ServiceCollection”不包含“ AddSingleton”的定义
  无法解析符号“ AddSingleton”


我试图尽可能保持整洁,在DependencyProvider中继承了ServiceCollection类

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

    public void Register()
    {
        base.AddSingleton<IContext, Context>(); // this line errors
        new ServiceCollection().AddSingleton<IContext, Context>(); // this line works
    }
}


这是IDependencyProvider接口

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


我不能这样做,还是我做错了什么?我真的希望它是可行的,因为该解决方案似乎超级干净,以便创建一个新的ServiceCollection实例并为其使用字段。

只是为了澄清错误,我无法访问ServiceCollection上的任何基本方法,像这样

base.AddSingleton<IContext, Context>();


但是,当内联新实例时,此行有效

new ServiceCollection().AddSingleton<IContext, Context>();

最佳答案

base关键字不能解析扩展方法。您想要做的是:

this.AddSingleton<IContext, Context>();

09-27 14:56