1. 程式人生 > 其它 >AutoFac中常用方法說明

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<>));