[英]Castle.Windsor code review
我在一個工廠類中使用Castle.Windsor來創建所需類的實例。 您可以在下面找到示例。
public class MyFactory : IDisposable
{
protected readonly IKernel Kernel;
protected MyFactory(IKernel kernel)
{
Contract.Requires<ArgumentNullException>(
kernel.NotNull(),
"'kernel' parameter must be initialized.");
Kernel = kernel;
}
public IMyType Create(long param1, long param2)
{
return Kernel.Resolve<IMyType>(
new { numberOfRows, numberOfCells });
}
public void Dispose()
{
DisposeManagedResources();
}
protected virtual void DisposeManagedResources()
{
Kernel.Dispose();
}
}
還有其他想法嗎?
謝謝你提前。
通常,一個類僅應處置其擁有的資源。 由於此資源是從外部提供的,因此該類不負責處置它,除非對該資源的所有權“顯式”地隨其傳遞。 所有權的這種明確傳遞通常是通過文檔或使用通用設計模式來完成的。 例如,很自然的是,工廠方法(名為CreateXXX
)將所有權與返回的實例一起傳遞給調用方。 另一方面,DI容器包含Get
, GetInstance
或Resolve
方法,並且它們不將所有權傳遞給調用方。
但是除此之外,您需要處理的是DI容器。 DI容器實例通常應在應用程序的整個生存期內存在。 盡管容器通常需要處理,但是在此類中調用處理顯然是錯誤的位置。 這樣做不是工廠類的責任。 由於容器應在應用程序的整個生命周期內都處於生存狀態,因此正確的位置是在應用程序拆除期間。 例如,在ASP.NET應用程序中,這通常是global.asax中的Application_End
事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.