【问题标题】:ASP.NET 5 dependency injection outside of Controllers and Views控制器和视图之外的 ASP.NET 5 依赖注入
【发布时间】:2015-10-20 20:18:41
【问题描述】:

我发现的在 ASP.NET 5 中使用 DI 的每个教程或示例仅展示了它如何与控制器和 Razor 视图一起使用。我需要将 DI 用于其他类,但不知道解析类型和提供实例的正确方法。现在我有一个HackyDependencyResolver 的实例,为了获得正确的实例,所有东西都必须引用它。我想访问 ASP.NET 的服务解析器或遵循其他一些解决依赖关系的最佳实践。

例如,如果我有

public class SomeClass
{
  public SomeClass(IUseMe useMe)
  {
  }
}

它不是 ASP.NET MVC 控制器。创建SomeClass 时,我需要一种模式来解析IUseMe 的正确实例。我当然可以建立自己的全球工厂,但这是最好的方式吗?

【问题讨论】:

  • 你还想注入哪些类?
  • @3dd 我用一个我想做的例子更新了这个问题。谢谢。
  • @3dd 我在问如何在任何控制器之外实例化SomeClass。忘记控制器... ASP.NET5 处理得很好。如何解决 IUseMe 以便我不依赖特定的实现?
  • 您将IUseMe 加载到容器中,并使用一些满足它的类,然后要求容器解析实例。在 MVC Controllers 的情况下,容器配置为解析它们及其依赖关系

标签: asp.net dependency-injection asp.net-core


【解决方案1】:

DI 与 asp.net、控制器或视图无关。最后都是类。考虑到一个动作是你应用程序的入口点,你需要的任何服务都应该被注入,服务本身有一些依赖项,这些依赖项将在实例化控制器时由 DI 容器自动注入。

你所要做的就是定义你的服务(不是每个对象都需要注入deps)然后将这些服务注册到Di Container中。

如何解决 IUseMe 以便我不依赖特定的实现?

你没有。当控制器被实例化时,Di 容器会根据配置执行此操作。一切都有一个流程,你不能凭空挑选课程并说“我想要这个由 Di 容器创建”。好吧,你可以,但这是错误的方法。

使用 DI 容器的全部意义在于不关心实例化服务。框架负责与容器集成,您唯一的工作就是正确定义类并配置容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2016-02-01
    相关资源
    最近更新 更多