这个问题在这里已有答案:
我想编写一个依赖提供程序来注册我的依赖项。我继承了ServiceCollection类,这意味着我应该获得该类中的所有方法,对吧?错了,所以看来。
广告,你可以看到,我继承它,使用this.
关键字注册它,但没有它错误。
public class DependencyProvider : ServiceCollection, IDependencyProvider
{
public DependencyProvider() : base()
{
Register();
}
public void Register()
{
this.AddSingleton<ICoreContext, CoreContext>();
}
}
在没有AddSingleton
的情况下调用this.
会引发错误,说它无法找到方法,同时添加this
。它按预期工作。如果我需要在类的实例上访问它怎么办?
这也意味着如果我想访问这个类之外的任何方法,我必须复制DependencyProvider类中的方法,这个方法效率不高。
这是IDependencyProvider
界面
public interface IDependencyProvider : IServiceCollection
{
void Register();
}
就像我回答你here一样,AddSingleton
是IServiceCollection
的扩展方法。这意味着如果你想在DependencyProvider
中使用它,你需要使用this.AddSingleton
或直接引用ServiceCollectionServiceExtensions.AddSingleton
方法。
没有这个就调用AddSingleton。抛出一个错误,说它找不到方法,同时添加它。它按预期工作。如果我需要在类的实例上访问它怎么办?
那么,在这种情况下,你只需要按照你的期望使用它:
var myProvider = new DependencyProvider();
myProvider.AddSingleton<ICoreContext, CoreContext>();