2012-08-23 34 views
0

我有一個場景,我需要使用助手類注入一個類型的實例。在我們的系統中,我們目前正在使用Unity將該對象注入各個層。如何註冊在Unity中傳遞對象實例的助手類

這是我目前有:

container.RegisterInstance<ITest, new Test()>(); 

但不是我想用一個輔助類,將創建實例對我來說:

container.RegisterInstance<ITest, Helper.GetITestIntance()>(); 

回答

0

根據此:http://social.msdn.microsoft.com/Forums/en/wpf/thread/b71665b9-cc71-4c88-9776-6ccb4f871819似乎並沒有直接的辦法。你可以註冊一個將被使用的實例,或者註冊一個容器在需要的時候自行實例化的「Type」。似乎沒有任何方法註冊一個「工廠」,也沒有類型註冊方法不採取任何代表/回調..

可能是某種方式使用容器擴展 - 也許你會能夠攔截查詢一個實例,然後提供自己的迴應。我認爲這是一個很好的起點上讀到:

http://visualizationtools.net/default/unity-objectbuilder-part-i/
http://visualizationtools.net/default/unity-objectbuilder-part-ii/

編輯:對不起,對不起,我忽略了LifetimeManager註冊參數。看起來這正是你正在尋找的:http://tavaresstudios.com/Blog/post/Writing-Custom-Lifetime-Managers.aspx

因此,寫一個LifetimeManager形式的工廠,創建將在GetValue方法中完成,並向你的這個管理器註冊一個Type - 然後Unity會詢問對象實例的管理器。

6
container.RegisterType<ITest>(
    new ContainerControlledLifetimeManager(), 
    new InjectionFactory(o => Helper.GetITestIntance())); 
相關問題