zoukankan      html  css  js  c++  java
  • [翻译]Autofac 解析服务

    注册组件以后,通过容器或 ILifetimeScope 的 Resolve 方法解析服务:

    var builder = new ContainerBuilder();
    builder.RegisterType<MyComponent>().As<IService>();
    var container = builder.Build(); 
    
    using(var scope = container.BeginLifetimeScope())
    {
      var service = scope.Resolve<IService>();
    }

    请注意,本例使用 ILifetimeScope 解析服务,而不是直接从容器解析。尽管可以从根容器直接解析组件,但是,某些情况下导致内存泄露。建议始终从 ILifetimeScope对象解析组件,以确保服务的实例会被处置(Dispose)。请参考控制范围和生命周期一节。

    解析服务时,Autofac在服务的依赖层次中自动延伸,解析出构造服务对象需要的全部依赖项。如果遇到无法正确处理的循环依赖,或必需的依赖项找不到,将抛出 DependencyResolutionException。

    对于不确定否已注册的服务,可以用 ResolveOptional 方法或 TryResolve 方法尝试条件解析。

    // 若 IService 已注册,则解析成功,否则,返回 null。
    var service = scope.ResolveOptional<IService>(); 
    
    // 若IProvider 已注册,则解析成功,否则,可以执行其他操作。
    IProvider provider = null;
    if(scope.TryResolve<IProvider>(out provider))
    {
      // Do something with the resolved provider value.
    }

    ResolveOptional() 和 TryResolve() 方法判断特定的服务是否已注册,如果服务已注册,则尝试解析。如果解析失败(比如必需的依赖项未注册),仍会抛出 DenpendencyResolutionException。

  • 相关阅读:
    sqlserver游标使用误区
    工作笔记——sqlserver引号的运用
    疯狂JAVA——数组
    工厂模式、单例和多例
    数据库数据交互详解(一)
    2016-4-6
    2016-4-5 博问问题、答题和查看收获
    Maven+Spring Batch+Apache Commons VF学习
    你忽视的静态类的作用(必看)
    Wireshark抓包工具使用教程以及常用抓包规则
  • 原文地址:https://www.cnblogs.com/dongbeifeng/p/5300716.html
Copyright © 2011-2022 走看看