2012-11-19 35 views
0

我們正在使用WPF /卡利Micro和Ninject並有一個引導程序調用此: -訪問單eventAggregator

Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope(); 

我underatanding的是,這將被注入到每一次的構造函數的參數列表一個對象被實例化,但是有一個occassions,其構造函數必須是無參數的。當我們在構造函數中沒有參數時,我們如何訪問EventAggregator?

回答

0

看看Service Locator Pattern

UPDATE

在回答您的評論: InSingeltonScope()意味着Ninject將只創建一個實例,並每當有人問一個IEventAggregator它會返回一個實例。你仍然需要一個機制來請求它;在注入的情況下,構造函數要求將其注入。如果你的構造函數是無參數的,那麼服務定位器是你的方式要求的一個實例。

更新2

以下是你可能會發現有用的幾個環節:

http://stefanoricciardi.com/2009/09/25/service-locator-pattern-in-csharpa-simple-example/

http://blog.longle.net/2012/02/15/wrapping-the-ninject-kernel-with-servicelocator/

+0

您好,感謝您的評論。原諒我的困惑,但是當對象被聲明爲單例時,我們真的需要使用服務定位器模式嗎? 或許不正確的假設是每次實例化時都會使用相同的單例對象,因爲這是設置單例作用域的要點。 – xnetdude

+1

當你將IEventAggregator聲明爲單例時,它只會被實例化**一次**。但是單例包含在Ninject內核中。因此,您需要一種方法來向內核請求'IEventAggregator',這是ServiceLocator模式的用途。您可以使用它**在構造函數外部(或無參數構造函數內)爲'IEventAggregator'提問**。或者,你可以使用[Property Injection](https://github.com/ninject/ninject/wiki/Injection-Patterns) – khellang

+0

屬性注入也是一個好主意,但是假設你想讓你注入的任何東西成爲你正在構建的類的公共屬性。對我來說,暴露一個公有財產用於擁有類不負責的東西似乎是不好的做法,只是爲了讓它被注入。 – CodingGorilla