我目前正在权衡DI和SL之间的优缺点.但是,我发现自己处于以下问题22中,这意味着我应该只使用SL作为一切,并且只在每个类中注入一个IoC容器.
DI Catch 22:
一些依赖项,如Log4Net,根本不适合DI.我称之为元依赖关系并认为它们对调用代码应该是不透明的.我的理由是,如果一个简单的类'D'最初是在没有记录的情况下实现的,然后增长到需要记录,那么依赖类'A','B'和'C'现在必须以某种方式获得这种依赖并将其从'A'到'D'(假设'A'组成'B','B'组成'C',依此类推).我们现在已经进行了重要的代码更改,因为我们需要登录一个类.
因此,我们需要一种不透明的机制来获取元依赖性.我想到了两个:Singleton和SL.前者具有已知的局限性,主要是关于刚性范围的能力:最好的是Singleton将使用存储在应用程序范围内的抽象工厂(即在静态变量中).这允许一些灵活性,但并不完美.
更好的解决方案是将IoC容器注入此类,然后使用该类中的SL从容器中解析这些元依赖关系.
因此,捕获22:因为类现在正在注入IoC容器,那么为什么不使用它来解析所有其他依赖项呢?
我非常感谢你的想法:)
c# singleton dependency-injection dependency-management service-locator
我有一个使用Castle Windsor的MVC4站点,我想添加一些WebAPI调用,所以我开始在互联网上挖掘一下.
现在我不知道IoC的来龙去脉; 我按照教程了解了如何在我的项目中设置Castle Windsor,在基本控制器中注入IUnitOfWorkFactory和IApplicationService作为公共属性,以及控制器构造函数中需要的一些其他接口.它游泳,所以我从来没有做过更多.
到处说我上的WebAPI读书了,有人告诉我DI不会工作,以及使用温莎城堡,谈论与存在的问题IDependencyResolver和IDependencyScope.有几种解决方法和实现如何解决这个问题,但我不清楚的是究竟是什么问题.代码片段都包括在内,但前提是你知道他们属于哪个阶层,他们是如何被调用,不幸的是我不知道.另外,我在网上看到的所有例子都提到了一个独家的WebAPI项目,而不是一个ApiController明智地被抛出的MVC4项目.我不知道这是怎样的,或者是否会影响到任何东西.
为什么我的标准控制器无法使用API控制器?为了让WebAPI调用和标准Web调用在同一个应用程序中工作,需要做什么样的代码杂技?