2011-12-08 32 views
1

我試圖啓動一個類,期待在它的CTOR System.Type。IoC spring.net注入System.Type

在spring.net配置文件中是否有一種方法可以實現這一點,並且最好傳遞一個spring初始化對象的類型?

感謝,

Lihnid

+0

我看到你接受了塞巴斯蒂安的回答。他的回答是正確的,但並不像你問的那樣給你一種春天管理的物體。我已經更新了我的答案,展示了一種更加清晰的方法。 – Marijn

回答

3

我認爲這應該這樣做:

<constructor-arg name="argumentname" expression="T(namespace.to.my.type, assemblyname)" /> 
+1

這會工作;大會名稱是可選的,但很好投入。 – Marijn

+0

謝謝塞巴斯蒂安 – lihnid

3

您可以使用表達式來注入類型:

<!-- use an expression to specify type --> 
<constructor-arg type="System.Type, mscorlib" 
       expression="T(MyNameSpace.MySecondClass)" /> 

要獲得彈簧管理對象的類型,您可以使用expression="@(object-id-here)"syntax to use a spring-managed object in your expression和簡單的調用GetType()它:

<!-- inject the type of MySecondObject, configured elsewhere --> 
<constructor-arg type="System.Type, mscorlib" 
       expression="@(MySecondObject).GetType()" /> 
4

這也適用於:

<constructor-arg name="argumentname" value="MyNamespace.MyType, MyAssembly"/> 

使用VS2010外接智能感知: http://www.springframework.net/vsaddin/

+1

不錯!我不知道這是可能的,沒有表達式 –

+0

@bbaia:很高興知道。 spring.net是否將它委託給.NET的[TypeNameConverter](http://msdn.microsoft.com/en-us/library/system.configuration.typenameconverter.aspx)?如何在沒有註冊TypeConverter的情況下工作? 'System.Type'沒有用'TypeConverter(typeof(TypeNameConverter))'[根據MSDN](http://msdn.microsoft.com/en-us/library/system.type.aspx)修飾。 – Marijn

+0

@Marijn:檢查Spring.Core.TypeConversion命名空間中的類「RuntimeTypeConverter」和「TypeConverterRegistry」。 – bbaia

0

以防萬一,如果有人想知道怎麼辦這與使用System.Type作爲字典鍵。

<object id="myDictionary" type="System.Collections.Generic.Dictionary&lt;System.Type,string&gt;"> 
    <constructor-arg name="dictionary"> 
     <dictionary key-type="System.Type" value-type="string"> 
      <entry value="myStringValue"> 
       <key> 
        <expression value="T(namespace.to.MyClassType)"></expression> 
       </key> 
      </entry> 
     </dictionary> 
    </constructor-arg> 
</object>