4

我正在使用Unity框架作爲IoC容器。Unity - 通過XML工廠

我的配置看起來有些像這樣:

<unity> 
    <container> 
    <register type="Namespace1.IFoo, FooAsm" 
       mapTo="Namespace2.Bar, BarAsm"> 
    </register> 
</conainer> 

我想註冊一個容器使用的工廠方法。我如何使用app.config來存檔它?

我期待這樣的事情:

<unity> 
    <container> 
    <register type="Namespace1.IFoo, FooAsm" 
       factory="Namespace2.Bar, BarAsm" 
       method="create"> 
    </register> 
    </conainer> 
</unity> 

任何suggestsions?

+1

切換到基於代碼的配置,嚴重。如果可以的話,不要使用XML來配置容器,因爲它很脆弱並且容易出錯。基於代碼的配置更加靈活,並且可以爲您提供編譯時支持。 – Steven 2012-03-30 12:50:07

+0

基於代碼的配置如何更靈活?要麼添加反射,要麼需要強大的參考。兩者都不是很靈活。 – Jaster 2012-03-30 12:52:32

+0

它更靈活,因爲你可以註冊lambda表達式。有什麼用途沒有一個強有力的參考?既然你在XML中命名了這個類型,你仍然有一個對這個類型的引用,但是現在你鬆散的編譯時間檢查。 – Steven 2012-03-30 12:55:50

回答

4

This thread提供了一個關於如何添加Unity工廠方法支持的良好響應。事實上,你必須下載this bitbucket源代碼(並將引用改爲4.0框架)。
如果你現在Generic support for Unity你得到一個相當真棒的解決方案可能看起來像這樣的補充:使用XML配置統一框架的通用工廠的

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 
    <unity xmlns="schemas.microsoft.com/practices/2010/unity"> 
    <sectionExtension type="Unity.FactoryConfig.FactoryConfigExtension, Unity.FactoryConfig"/> 
    <alias alias="Factory" type="Namespace1.GenericFactory`1, asm1"/> 
    <container> 
     <register type="Namespace1.ITest, asm1"> 
     <factory type="Factory[[Namespace1.ITest, asm1]]" method="Create" /> 
     </register> 
    </container> 
    </unity> 
</configuration> 

支持!
感謝您的所有意見:)

+0

我走了這種方法,它的工作正是我所希望的。 – Rob 2013-01-09 14:57:02

1

我不認爲有一個內置的方式來做到這一點。我通常只是註冊工廠本身(地圖IMyFactory-至 - >MyFactoryImpl),然後將工廠注入需要它的類中,並讓這些類調用工廠。

但是,我認爲你可以通過爲Unity創建一個擴展,從Unity中直接調用工廠。在這個問題的答案中提到了一對夫婦:How to create objects using a static factory method?

+1

http://stackoverflow.com/questions/3815581/microsoft-unity-issue-with-resolve < - 它似乎有一個工廠的支持,但我發現樣品代碼。沒有設法將它們翻譯成XML但 – Jaster 2012-03-30 13:11:47