Autofac官方文档(七)【解析服务】
来源:互联网 发布:广西干部网络培训平台 编辑:程序博客网 时间:2024/06/04 19:45
在将组件注册到适当的服务之后,您可以从构建的容器和子生命周期范围解析服务。 您可以使用Resolve()
方法执行此操作:
var builder = new ContainerBuilder();builder.RegisterType<MyComponent>().As<IService>();var container = builder.Build();using(var scope = container.BeginLifetimeScope()){ var service = scope.Resolve<IService>();}
你会注意到这个例子直接从生命周期作用域解析服务,而不是直接从容器中解析 - 你也应该这样做。
虽然可以直接从根容器解析组件,但在某些情况下通过应用程序执行此操作可能会导致内存泄漏。 建议您始终从可能的情况下解析生命周期中的组件,以确保服务实例得到妥善处置并进行垃圾收集。您可以在控制范围和生命周期的章节中阅读更多信息。
解析服务时,Autofac
会自动链接服务的整个依赖关系层次并解析完全构建服务所需的任何依赖关系。 如果您有循环依赖关系处理不当或缺少必需的依赖关系,您将得到一个DependencyResolutionException
。
如果您有可能注册或可能未注册的服务,则可以使用ResolveOptional()
或TryResolve()
尝试对服务进行条件解析:
//如果IService 已注册,则会被解析; 如果未注册,则返回值为空。var service = scope.ResolveOptional<IService>();//如果IProvider已注册,则提供者变量将保存该值; 否则你可以采取一些其他的行动。IProvider provider = null;if(scope.TryResolve<IProvider>(out provider)){ //用已解析的提供值做一些事情。}
ResolveOptional()
和TryResolve()
都是以注册的特定服务的条件性质为中心的。 如果服务已注册,则会尝试解决。 如果解析失败(例如,由于没有注册依赖关系),你仍然会得到一个DependencyResolutionException
。 如果需要条件基于服务是否可以成功解析的服务的条件解析,请使用try/catch
块包装Resolve()
调用。
解析服务的其他主题:
Passing Parameters to Resolve Available Parameter Types Parameters with Reflection Components Parameters with Lambda Expression Components Passing Parameters Without Explicitly Calling ResolveImplicit Relationship Types Supported Relationship Types Direct Dependency (B) Delayed Instantiation (Lazy<B>) Controlled Lifetime (Owned<B>) Dynamic Instantiation (Func<B>) Parameterized Instantiation (Func<X, Y, B>) Enumeration (IEnumerable<B>, IList<B>, ICollection<B>) Metadata Interrogation (Meta<B>, Meta<B, X>) Keyed Service Lookup (IIndex<X, B>) Composing Relationship Types Relationship Types and Container Independence
您可能还有兴趣查看高级主题列表,以了解有关命名和关键服务,使用组件元数据以及其他服务解决方案相关主题的信息。
阅读全文
0 0
- Autofac官方文档(七)【解析服务】
- Autofac官方文档(八)【解析服务之传递参数来解析】
- Autofac官方文档(九)【解析服务之隐式关系类型】
- Autofac中文文档--二、解析服务--1解析参数传递
- Autofac官方文档(一)【开始】
- Autofac官方文档(二)【新版本】
- Autofac官方文档(十四)【销毁】
- Autofac官方文档(十七)【配置】
- Autofac官方文档(十九)【模块】
- Autofac官方文档(十一)【使用生命周期范围】
- Autofac官方文档(十二)【实例范围】
- Autofac官方文档(十三)【捕获依赖】
- Autofac官方文档(十五)【生命周期事件】
- Autofac官方文档(十八)【JSON/XML 配置】
- Autofac官方文档(二十)【应用集成】
- Autofac中文文档--二、解析服务--2隐式关系类型
- Autofac官方文档翻译——(一)Getting Started
- Autofac官方文档(三)【注册组件之注册概念】
- masm汇编之——过程与宏的区别
- Centos6.5安装Python3.6(和python2共存)
- 可拖拽和带二维码的登录窗口设计效果 -- 一天一个篇文章
- 如何把坐标作为hashmap的key
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Autofac官方文档(七)【解析服务】
- 2017湖湘杯pwn200的wp
- Autofac官方文档(八)【解析服务之传递参数来解析】
- Spring入门-----HelloWorld
- Glide和Picasso对比
- xilinx--IOB(2)
- Autofac官方文档(九)【解析服务之隐式关系类型】
- oracle基础-->delete和truncate的区别
- Ubuntu中SonarQube6.7 启动报错:can not run elasticsearch as root