[翻譯]Autofac 解析服務


注冊組件以后,通過容器或 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。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com