AutoFac文檔
目錄
- 開始
- Registering components
- 控制范圍和生命周期
- 用模塊結構化Autofac
- xml配置
- 與.net集成
- 深入理解Autofac
- 指導
- 關於
- 詞匯表
自動裝配
從容器中可用的服務中選擇一個構造函數來創造對象,這個過程叫做自動裝配。
這個過程是通過反射實現的,所以實際上容器這種創造對象的行為比較適合用在配置環境中。
選擇構造函數
autofac自動從容器中選擇參數最多的構造函數。
如果想要選擇一個不同的構造函數,就需要在注冊的時候指定它。
builder.RegisterType(typeof(MyFoo)).UsingConstructor(typeof(int));
這個例子通過使用MyFoo(int)來忽略其他可用的構造函數。
額外的構造函數參數
有兩種方式可以添加額外的構造函數參數。在注冊的時候和在檢索的時候。在使用自動裝配實例的時候這兩種都會用到。
注冊的時候
使用WithParameters()方法在每一次創建對象的時候講component和參數關聯起來。
builder.RegisterType<MyFoo>() .WithParameters( new NamedParameter("message", "Hello!"), new NamedParameter("meaning", 42));
在檢索階段
在Resolve()的時候提供的參數會覆蓋所有名字相同的參數。
在注冊階段提供的參數會覆蓋容器中所有可能的服務。
使用自動裝配
至今為止,自動裝配最大的作用就是減少重復配置。許多相似的component無論在哪里注冊,都可以通過掃描使用自動裝配。
var builder = new ContainerBuilder(); builder.RegisterAssemblyTypes(Assembly.Load("Commands")) .As<ICommand>();
這並不妨礙你隨后為了滿足需求或者提升性能重新注冊一個覆蓋這些注冊。
builder.Register(c => new HelpCommand(Settings.HelpFile));