ASP.NET Web API和依赖注入

jopen 10年前

  英文原文:ASP.NET Web API And Dependency Injection

  ASP.NET Web API 中自带了一个依赖解析器(Dependency Resolver)接口,允许我们向控制器注入依赖关系。不过,Mark Seemann 建议要达到此目的最好还是使用 IHttpControllerActivator 接口,并举了两个例子。

  使用 IDependencyResolver 会带来哪些问题呢?Mark 做出了解释:

问题是,在某个(IDependencyResolver 的)实现中,你所得到的是一个 Type 实例,并要求返回一个对象,但你却并不了解上下文信息。你不知道依赖关系图有多深,并且当被多次要求提供相同服务的实例时,你并不知道这是来自同一个 HTTP 请求,还是多个并发的 HTTP 请求。

  Mark 建议最好替换服务容器(Service Container)中的 IHttpControllerActivator 接口。IHttpControllerActivator 提供了 HttpRequestMessage 对象,可以提供上下文信息。他还列举了两个示例,一个是“使用简单的自定义 DI 容器”,一个是“使用更加健壮的 DI 容器,Castle Windsor”。

  注意,不管是哪种方法,每个请求都会创建一次控制器,并且在请求被处理后释放这些控制器。区别主要在于解析类型的时候,容器可以使用哪些信息。 在更广的范围来说,这只是 ASP.NET 可扩展性的一个示例。

来自: InfoQ