我一直在调查城堡项目,尤其是温莎.我对这项技术的可行性印象深刻,拥有这样一个松散耦合系统的好处是显而易见的.我唯一不确定的是,使用这种方法是否有任何缺点,特别是在asp中.网比如表演命中率等等.

我正试图让我的开发伙伴们看到这种方法的好处,我受到了以下回击:

  1. 这就是使用反射,每次从容器调用对象时,都必须使用反射,这样性能会很糟糕.(是这样吗?每次通话都会使用反射功能吗?)

  2. 如果我依赖于接口;如何处理具有附加到类上的额外方法和属性的对象?(通过继承)

推荐答案

要回答您的问题:

  1. 这就是使用反射和
  • 不,没有.大多数情况下,注册组件时几乎不使用反射.当您第一次从容器中请求组件时,它还可以在生成代理类型时使用反射.
  1. 如果我依赖于接口;怎样
  • 这完全是设计的问题.您不希望容器创建每个对象.您主要将其用于服务依赖项.在这种情况下,您并不关心接口后面实际隐藏的是什么类型(这就是它的全部意义所在,不是吗?)

您也可以有类组件,但它们有一些限制,您必须了解这些限制(例如,您不能拦截对非虚拟方法的调用).我发现温莎是最成熟的,最适合我的开发风格.

除了性能之外,我还没有听说过一个项目因为不可接受的性能而不得不放弃依赖容器.Windsor在这方面真的很聪明,它会缓存长时间操作的结果,这样你就不需要付出两次代价了. 您可以在互联网上找到比较许多IOC容器速度的图表.关于这些,有两点需要注意:所有的容器都非常快. 不要认为在这些图表上其他容器比Windsor更快,这就意味着它们更好.Windsor为您做了许多其他容器做不到的事情.

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

DBSet 不包含 Where 的定义

ASP MVC 授权除少数之外的所有操作

如何为发布模式设置调试错误

业务逻辑中的实体框架最佳实践?

返回 HttpResponseMessage 时的 WebAPI Gzip

SqlBulkCopy 超时

登录成功后 User.Identity.IsAuthenticated 为 false

如何在没有实体框架的情况下使用 ASP.NET Identity 3.0

如何从 Asp.net Mvc-3 发送邮箱?

设置 Response.Status 生成HTTP 状态字符串无效异常

如何防止 XXE 攻击(.NET 中的 XmlDocument)

如何在实体框架中添加表?

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

使用 ASP.NET 进行重定向后获取

当用户在文本框中按 Enter 键时执行按钮单击事件

elmah:没有 HttpContext 的异常?

System.Threading.Tasks - 限制并发任务的数量

ASP.NET MVC 5 Web.config:FormsAuthenticationModule或FormsAuthentication

Application_End global.asax