我有一個場景,我需要使用助手類注入一個類型的實例。在我們的系統中,我們目前正在使用Unity將該對象注入各個層。如何註冊在Unity中傳遞對象實例的助手類
這是我目前有:
container.RegisterInstance<ITest, new Test()>();
但不是我想用一個輔助類,將創建實例對我來說:
container.RegisterInstance<ITest, Helper.GetITestIntance()>();
我有一個場景,我需要使用助手類注入一個類型的實例。在我們的系統中,我們目前正在使用Unity將該對象注入各個層。如何註冊在Unity中傳遞對象實例的助手類
這是我目前有:
container.RegisterInstance<ITest, new Test()>();
但不是我想用一個輔助類,將創建實例對我來說:
container.RegisterInstance<ITest, Helper.GetITestIntance()>();
根據此: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會詢問對象實例的管理器。
container.RegisterType<ITest>(
new ContainerControlledLifetimeManager(),
new InjectionFactory(o => Helper.GetITestIntance()));