ASP.NET Web Api 2中每个请求的条件依赖关系解析

sch*_*cho 5 c# dependency-injection asp.net-web-api

我目前正在使用asp.net Web Api(5.0.0-rc1)开发Rest API。到目前为止,我们不使用任何DI容器,所以它是“穷人的DI”。但是计划是很快使用一个或另一个。

为了解决依赖性,我们使用了自己的实现,IHttpControllerActivator类似于Mark Seemann的博客中的描述。

问题

我们所有的控制器都使用服务来执行其操作。我们还试图将控制器重用于不同的角色。Fe列出所有用户的控制器具有HttpGet属性

[HttpGet("api/role/{role}/users")]
Run Code Online (Sandbox Code Playgroud)

因此,根据uri中的角色(可以是fe admindepartment),我们希望以不同的方式解决控制器的依赖关系。这可能意味着我们想用装饰器包装服务,或者需要根据角色将某种策略注入服务。

注意:依赖关系的条件解析可能在依赖关系图中很深。

问题

由于我对依赖注入还很陌生,所以我真的不确定解决条件依赖的标准方法是什么。依赖注入是基于每个请求的条件,还是依赖图相当固定,在这种情况下我们应该使用工厂?Fe控制器ISomeServiceFactory代替了控制器ISomeService,工厂本身得到了注入角色。

我还查看了温莎城堡的类型化工厂设施,但不确定是否能解决我们的问题。

Mar*_*ann 0

有多种方法可以将运行时值转换为多个可用依赖项(以及整个子图)之一。我不喜欢依赖工厂,而是更喜欢在可用的依赖项中进行选择

到目前为止,我已经确定了至少三种不同的方法:

其中,我个人更喜欢Partial Type Name,因为它是最松散耦合的。

所有这些选择策略都依赖于选择之前可用的所有策略实例。通常,这不是问题,因为如果它们是线程安全的,则可以在所有 HTTP 请求中重用每个实例的单个实例。

然而,即使一个或多个服务不是线程安全的,也有一些方法可以处理潜在的性能问题- 最明显的是使用虚拟代理模式。