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

时间:2016-03-16 05:05:15

标签: dependency-injection asp.net-core

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

2 个答案:

答案 0 :(得分:5)

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

如果你不能摆脱静态方法,你可能会一路走下去并引入另一种反模式http://pandas.pydata.org/pandas-docs/stable/io.html#sqlite-fallback。简而言之:在Startup类中,您将ServiceProvider的引用放在静态属性的静态属性(例如,调用它&#34; ServiceProviderSingleton&#34;)中(例如&#34; ServiceProviderProvider&#34;)。这样你就可以调用&#34; ServiceProviderProvider.ServiceProviderSingleton.GetService()&#34;。

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

答案 1 :(得分:0)

我们看看微软的静态方法(扩展) - 他们似乎没有在那里使用日志 - 只是抛出适当的异常,例如在UseMvc方法中(对于StartUp类):

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