zoukankan      html  css  js  c++  java
  • Autofac

    通过程序集扫描, 能够自动注册符合规则的类型. 这种方式, 很方便. 这一篇就介绍下程序集扫描吧. 

    一、扫描

    其实前面已经介绍过, 这种方式. 不过并不全.

    先看一个之前的方式:

    var builder = new ContainerBuilder();
    
    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());//.Where(n => n.Name.EndsWith("son"));
    
    var container = builder.Build();
    
    var person = container.Resolve<Person>();
    person.Self();
    
    var dog = container.Resolve<Dog>();
    dog.Say();

    二、过滤

    如果我并不想注册那么多的类型, 但是又想通过程序集的注册方式去注册, 那怎么办呢?

    1. Where过滤

    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(n => n.Name.EndsWith("son"));
    
    var container = builder.Build();
    
    var person = container.Resolve<Person>();
    person.Self();

     

    只需要在后面添加Where方法去过滤即可. 在过滤之后, var dog = container.Resolve<Dog>()这句话就回报错, 因为他并没有注册进去.

    2. Except过滤

    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Except<Person>();
    
    var container = builder.Build();
    //报错
    //var person = container.Resolve<Person>();
    //person.Self();
    
    var dog = container.Resolve<Dog>();
    dog.Say();

     使用Except的时候, 有一个注意的小事项. 

    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Except<Person>(c => c.As<IPerson>());
    var container = builder.Build();
    
    var person = container.Resolve<IPerson>();
    person.Self();
    //报错
    //var personA = container.Resolve<Person>();
    //personA.Self();

    从上面可以看到, 虽然Person不能直接用了, 但是却可以通过IPerson的方式, 来获取Person的实例.

    三、指定服务

    注册的时候, 有一个As方法, 在之前已经看到过了, 就是没有解释过. 其实就是指定服务. 不过在程序集扫描里面, 就不是As()了

    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces();
    var container = builder.Build();
    
    var person = container.Resolve<IPerson>();
    person.Self();

    额, 这里居然调用了两个构造函数, 别在意, 我用的是上一篇的代码. 

     在AsImplementedInterfaces()方法中, 就注册了所有符合规则的服务.

  • 相关阅读:
    Http与WWW服务精解
    Http与WWW服务精解
    6-13
    好用的工具说明
    JVM、JRE和JDK三者间的区别和联系
    css进阶之二:flex弹性布局
    MVVM
    如何理解TCP的三次握手协议?
    java里面的设计模式
    linux常用命令
  • 原文地址:https://www.cnblogs.com/elvinle/p/6182992.html
Copyright © 2011-2022 走看看