我想编写一个依赖提供程序来注册我的依赖。我继承了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();
}
答案 0 :(得分:2)
就像我here回答您一样,AddSingleton
是IServiceCollection
的扩展方法。这意味着,如果要在DependencyProvider
中使用它,则需要使用this.AddSingleton
或直接ServiceCollectionServiceExtensions.AddSingleton
引用该方法。
不带此调用AddSingleton。在添加此方法时抛出错误,指出找不到方法。它按预期工作。如果我需要在该类的实例上访问它,该怎么办?
好吧,在这种情况下,您只需按预期使用它即可即可:
var myProvider = new DependencyProvider();
myProvider.AddSingleton<ICoreContext, CoreContext>();