2011-01-27 22 views
2

構造我有一個類MyClass具有以下構造:進樣依賴性與統一

public MyClass(IRepository repository, AnotherClass anObject) { ... } 

接口IRepository被註冊在應用程序啓動時使用Unity 2要被映射一個具體的類:現在

IUnityContainer container = new UnityContainer(); 
container.RegisterType<IRepository, MyConcreteRepository>(); 

,構造函數的第二個參數的具體情況取決於應用程序上下文始終是不同的。所以我不能註冊AnotherClass是在啓動特定的實例,也沒有任何意義,讓團結創建一個類的對象,其默認的構造函數,如果我叫這會發生:

container.Resolve<MyClass>() 

這解析爲new MyClass(new MyConcreteRepository(), new AnotherClass())

我所尋找的,如果我有AnotherClass類型給出一些具體的對象anObject,是一種方式告訴統一解決MyClass

new MyClass(new MyConcreteRepository(), anObject) 

,而不在容器永久註冊實例anObject

這是可能的和如何?

感謝您提前幫忙!

回答

3

你可以使用一個ParameterOverride

var myClass = container.Resolve<MyClass>(new ParameterOverride("anObject", anObject)); 

如果現在還不清楚給出的示例中使用的名稱,這個object對象分配給在MyClass的構造函數名爲「anObject」參數。

+1

謝謝,這個作品!不幸的是,如果我不小心將`anObject`的參數名稱更改爲`myObject`之類的其他參數,並且Unity創建一個新的默認對象,它會默認忽略重寫的參數。在我的特殊情況下,我寧願得到一個「ParameterNotFound」異常或類似的東西。但我想我必須忍受這一點。 – Slauma 2011-01-27 18:10:09