asp.net-mvc – 使用IoC,可以向Singleton注入具有Transient Life
我们有一个ASP.NET MVC应用程序,使用IoC将服务引用注入控制器,将存储库引用注入服务.
控制器必须具有瞬态寿命,因为它们必须根据请求进行实例化.但是,如果整个IoC堆栈按请求进行新增,则会产生一些开销.我们有比我想要的更多的依赖项,一个选项是拥有更多的控制器,每个控制器在堆栈中具有更少的依赖性.但是,暂时把它放在一边,我的问题是,如果一个注入单身的对象具有一个具有瞬态生命周期的依赖关系,那么这些依赖关系是否会因为被Singleton拥有而被视为单身? 具体来说,如果我们有以下内容 RepositoryA(需要是瞬态的,因为当前设计在构造函数中注入用户上下文) 实例化如下: public ServiceA(IRepositoryA repo) {} public ControllerA(IServiceA service) {} RepositoryA实际上是否会被实例化一次因为ServiceA被实例化一次? 我99%肯定答案是肯定的,但只想确认我必须在这里做的重构数量. 另外,假设服务和存储库没有任何用户/请求特定的实例变量,作为一种设计方法,是否有任何理由不对它们使用Singleton生命周期? 解决方法
那是对的.由于此类组件保留其依赖项(通过将其引用存储在私有字段中),因此只要组件本身存在,这些依赖项就会存在.换句话说,它们的生命周期被隐含地提升到组件的生命周期(如果它们的寿命更短). 如果你有这个,你的DI配置肯定是错误的,迟早会出现这个错误.可能只在生产中,几乎没有在您的开发机器上:-S. 通常,容器管理的所有组件应仅依赖于寿命等于或长于组件本身的抽象. 有些框架甚至具有分析服务来检测这些类型的配置错误.尽管如此,在连接所有依赖项时应该非常小心.通常,尽可能将组件配置为瞬态是最安全的,因为允许瞬态组件包含任何生活方式的依赖性.拥有许多瞬态对象通常不会成为性能问题.为每个Web请求构建一个相当大的对象图通常足够快(否则尝试切换到DI framework with a higher throughput). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 如何使用App_Code帮助程序使用
- asp.net – 从Visual Studio 2015发布
- asp.net – 使用jQuery ajax进行表单身份验证
- asp.net – 奇怪的Javascript JSON未定义错误
- asp.net – HTTP错误500.23之后添加到我的本地网
- asp.net – 将web.web应用程序池添加到web.confi
- 在asp.net页面之间传递数据
- iis-7 – 本地语言的布尔值
- asp.net-mvc – 将http://mydomain.com/ctrlr/ac
- 推荐最新的Asp.Net Core 下开源的AOP框架 Aspect