AutoFac中常用方法說明
雖然AutoFac中的方法都有說明,但是有些常用的方法不太好理解,不曉得這個方法的作用,是幹嘛的。
1、AsImplementedInterfaces() 是以介面方式進行注入,注入這些類的所有的公共介面作為服務
2、InstancePerRequest() 每次請求共享同一個例項,使用ef時,使不同的操作使用同一個資料上下文
3、PreserveExistingDefaults() 如果不止一個元件暴露了相同的服務, Autofac將使用最後註冊的元件作為服務的提供方,那麼使用PreserveExistingDefaults防止後面註冊的覆蓋前面註冊的
builder.Register<A>() .As<IA>(); builder.Register<AA>() .As<IA>(); 這樣AA就會覆蓋A builder.Register<AA>() .As<IA>().PreserveExistingDefaults() 這樣A是IA的預設值,不會被AA覆蓋
4、InstancePerDependency為每個依賴或者呼叫(Resolve())都建立一個新的物件,唯一的例項
5、SingleInstance 為每次請求都使用同一個物件,單例模式.告訴容器,是個單例,但這個單例不用自己實現。
6、RegisterGeneric 對泛型類進行註冊
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>))
7、RegisterInstance() 註冊一個例項,比如: 對已經存在的物件的例項進行註冊,這樣可以使例項轉化為由容器託管的例項
8、RegisterControllers() 註冊Controllers
builder.RegisterControllers(Assembly.GetExecutingAssembly()) 註冊當前程式集中的所有Controllers
9、RegisterFilterProvider() 註冊Filter過濾器
builder.RegisterFilterProvider()
10、RegisterAssemblyTypes 註冊類
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())註冊了當前程式集內的所有的類
11、InstancePerMatchingLifetimeScope 在一個做標識的生命週期域中,每一個依賴或呼叫建立一個單一的共享的例項。打了標識了的生命週期域中的子標識域中可以共享父級域中的例項
builder.RegisterType<A>() .AsImplementedInterfaces() .InstancePerMatchingLifetimeScope();
12、InstancePerHttpRequest在一次Http請求上下文中,共享一個元件例項。僅適用於asp.net mvc開發
13、InstancePerLifetimeScope在一個生命週期中,每一次的依賴元件或呼叫(Resolve())建立一個單一的共享的例項,且每一個不同的生命週期域,例項是不同的
14、UsingConstructor(引數) 自動裝配,手動使用特定的建構函式
builder.RegisterType<A>().UsingConstructor(typeof(IA),typeof(IAA)) 這樣指定呼叫的是A(IA,IAA)的建構函式,如果該建構函式不存在則報錯
15、[AsClosedTypesOf(open)]AsClosedTypesOf(typeof(IA<>)):如果是多繼承的話,註冊的程式集所對應的服務(介面)是離這個類最近的開放的泛型例項(介面)
builder.RegisterAssemblyTypes(A).AsClosedTypesOf(typeof(IRepository<>));