註冊組件以後,通過容器或 ILifetimeScope 的 Resolve 方法解析服務: 請註意,本例使用 ILifetimeScope 解析服務,而不是直接從容器解析。儘管可以從根容器直接解析組件,但是,某些情況下導致記憶體泄露。建議始終從 ILifetimeScope對象解析組件,以確保服務的實
註冊組件以後,通過容器或 ILifetimeScope 的 Resolve 方法解析服務:
var builder = new ContainerBuilder(); builder.RegisterType<MyComponent>().As<IService>(); var container = builder.Build(); using(var scope = container.BeginLifetimeScope()) { var service = scope.Resolve<IService>(); }
請註意,本例使用 ILifetimeScope 解析服務,而不是直接從容器解析。儘管可以從根容器直接解析組件,但是,某些情況下導致記憶體泄露。建議始終從 ILifetimeScope對象解析組件,以確保服務的實例會被處置(Dispose)。請參考控制範圍和生命周期一節。
解析服務時,Autofac在服務的依賴層次中自動延伸,解析出構造服務對象需要的全部依賴項。如果遇到無法正確處理的迴圈依賴,或必需的依賴項找不到,將拋出 DependencyResolutionException。
對於不確定否已註冊的服務,可以用 ResolveOptional 方法或 TryResolve 方法嘗試條件解析。
// 若 IService 已註冊,則解析成功,否則,返回 null。 var service = scope.ResolveOptional<IService>(); // 若IProvider 已註冊,則解析成功,否則,可以執行其他操作。 IProvider provider = null; if(scope.TryResolve<IProvider>(out provider)) { // Do something with the resolved provider value. }
ResolveOptional() 和 TryResolve() 方法判斷特定的服務是否已註冊,如果服務已註冊,則嘗試解析。如果解析失敗(比如必需的依賴項未註冊),仍會拋出 DenpendencyResolutionException。