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



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

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

如果你不能摆脱你的静态方法,你不妨一路走下去,引入另一个反模式,即服务定位器模式。简而言之:在 Startup 类中,您将对 ServiceProvider 的引用放在静态类(例如"ServiceProviderProvider")的静态属性(例如称为"ServiceProviderSingleton")中。这样,您只需调用"ServiceProviderProvider.ServiceProviderSingleton.GetService()"。

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

如果我们看一下Microsoft的静态方法(扩展) - 它们似乎没有在那里使用日志记录 - 只需抛出适当的异常,例如在UseMvc方法中(对于StartUp类):

https://github.com/aspnet/Mvc/blob/760c8f38678118734399c58c2dac981ea6e47046/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs

最新更新