0
有一個代碼:如何使用統一和對象工廠
class MyClass : IMyInterface
{
public void DoSomething()
{
using(var dependency = new Dependency())
{
// some code
}
// some code
}
public void DoSomething2()
{
using(var dependency = new Dependency())
{
// some code
}
// some code
}
}
因此,依賴是自IDisposable繼承的類。
我想使用Unity容器重寫代碼:
class MyClass : IMyInterface
{
private readonly IDependency _dependency;
public MyClass(IDependency dependency)
{
_dependency = dependency;
}
public void DoSomething()
{
using(_dependecy)
{
// some code
}
// some code
}
public void DoSomething2()
{
using(_dependecy)
{
// some code
}
// some code
}
}
該解決方案是行不通的,因爲相關的新實例,應該爲每個「使用」創建。好的,我應該注入類似工廠的東西:
class MyClass : IMyInterface
{
private readonly IDependencyFactory _dependencyFactory;
public MyClass(IDependencyFactory dependencyFactory)
{
_dependencyFactory = dependencyFactory;
}
public void DoSomething()
{
using(var dependency = _dependecyFactory.Create())
{
// some code
}
// some code
}
public void DoSomething2()
{
using(var dependency = _dependecyFactory.Create())
{
// some code
}
// some code
}
}
這是解決方法嗎?我有疑問,因爲:
- 這樣的工廠使代碼複雜化。
- 如何實例化DependencyFactory方法中的Dependency實例?只使用New關鍵字並不好,因爲在這種情況下,我失去了Unity攔截邏輯(日誌記錄,緩存等)。
你能重寫你的示例代碼來顯示在這裏播放的實際代碼和類嗎?什麼是'Dependency'類型,爲什麼你需要在每種方法的末尾處置它? – Steven
這是我的項目中經常遇到的一個通用示例。 MyClass的生命週期遠遠長於依賴關係。必須儘快處理IDisposable對象(非託管資源),並僅在需要它們的代碼塊中使用。 – Hopeless