如何在Asp.net Core rc1中的静态方法中使用DI

Joh*_*ohn 3 dependency-injection asp.net-core

我看到ServiceProvder.GetService<ApplicationDbCotnext>()defaut 模板用于 初始化DbContext,但当你在静态方法中,我不知道如何获得DbContext,因为没有ServiceProvider.有办法搞定ServiceProvider吗?

Dan*_*aan 5

嗯,首先,这与asp.net-core本身无关.这更多与依赖注入的工作方式有关.你必须问问自己为什么你的方法是静态的.这真的有必要吗?

如果你无法摆脱静态方法,你可能会一路走下去并引入另一种反模式,即服务定位器模式.简而言之:在Startup类中,您将ServiceProvider的引用放在静态类的静态属性(例如,调用它为"ServiceProviderSingleton")中(例如"ServiceProviderProvider").这样您就可以调用"ServiceProviderProvider.ServiceProviderSingleton.GetService()".

再次,我建议给你的整体设计一个批判的外观.但如果这是你需要/想要的,那么我希望它有所帮助.

  • 如果需要访问数据库的长时间运行的后台任务,似乎能够访问服务是合理的(从静态类或您在请求管道之外工作的任何场景)。 (2认同)