目录
- 开始
- Registering components
- 控制范围和生命周期
- 用模块结构化Autofac
- xml配置
- 与.net集成
- 深入理解Autofac
- 指导
- 关于
- 词汇表
扫描
autofac可以使用约定在程序集中注册或者寻找组件。
发现组件
autofac2可以根据用户指定的规则在程序集中注册一系列的类型,这种方法叫做convention-driven registration或者扫描。
12345 | var dataAccess = Assembly.GetExecutingAssembly(); builder.RegisterAssemblyTypes(dataAccess) .Where(t => t.Name.EndsWith( "Repository" )) .AsImplementedInterfaces(); |
每个RegisterAssemblyTypes方法只能应用一套规则。如果有多套不同的集合要注册,那就有必要多次调用RegisterAssemblyTypes。
选择类型
RegisterAssemblyTypes接受程序集的集合。默认情况下,程序集中所有公共具体的类都会被注册。
如果想要过滤注册的类型,可以使用Where.向下面这样:
1 | Where(t => t.Name.EndsWith( "Repository" )) |
如果想要排除某些类型,使用Except():
1 | Except<MyUnwantedType>() |
或者,自定义那些已经排除的类型的注册:
1 | Except<MyCustomisedType>(ct =>ct.As<ISpecial>().SingleInstance()) |
多个过滤器可以同时使用,这时他们之间是AND的关系
指定服务
RegisterAssemblyTypes这个注册方法是注册单个方法的超集,所以类似As的方法也可以用在程序集中,例如
1 | As<IRepository>() |
As和Named这两个方法额外的重载方法接受lambda表达式来决定服务会提供什么样的类型。