Если Вы видите из памяти, рассматриваете, вероятно ли это: Вам действительно нужно так много памяти? Если не (т.е. когда у Вас нет огромных объектов и если Вы не должны создавать миллионы объектов по некоторым причинам), возможности состоят в том, что у Вас есть утечка памяти.
В Java, это означает, что Вы сохраняете ссылку на объект где-нибудь даже при том, что Вам больше не нужен он. Частые причины для этого забывают звонить близко () на ресурсах (файлы, соединения с БД, операторы и наборы результатов, и т.д.).
, Если Вы подозреваете утечку памяти, используйте профилировщика для нахождения, какой объект занимает всю доступную память.
Я думаю, вам нужно использовать метод -элемент, чтобы заархивировать это. Это неприятно, но это обходной путь.
Ваш тип должен определять метод Add (строковый ключ, строковое значение), который контейнер Unity использует для вставки значений.
<method name="Add">
<param name="key" parameterType="string">
<value value="localHost"/>
</param>
<param name="value" parameterType="string">
<value value="127.0.0.1"/>
</param>
</method>
Unity определенно не поддерживает словари для конфигурации контейнера. См. Сборка словарей с использованием контейнера Unity?
Я обнаружил, что в Unity есть ошибки при работе с Generics ( http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292 ), есть довольно уродливый обходной путь:
public class MyDictionary : Dictionary<string,string>{
public MyDictionary() {
}
}
теперь в файле конфигурации:
<typeAlias alias="string" type="System.String, mscorlib" />
<typeAlias alias="Dictionary" type="MyFakeNamespace.MyDictionary, MyFakeAppDll" />
...
, а затем с использованием предложения Jehof:
<type name="ConfigurationDictionary" type="Dictionary">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<method name="Add" key="0">
<param name="key" parameterType="string">
<value value="localHost"/>
</param>
<param name="value" parameterType="string">
<value value="127.0.0.1"/>
</param>
</method>
<method name="Add" key="1">
<param name="key" parameterType="string">
<value value="contentHost"/>
</param>
<param name="value" parameterType="string">
<value value="\\content"/>
</param>
</method>
<method name="Add" key="2">
<param name="key" parameterType="string">
<value value="virtualDir"/>
</param>
<param name="value" parameterType="string">
<value value="/"/>
</param>
</method>
</typeConfig>
</type>
ключевой атрибут в теге метода должен быть уникальным, чтобы вызвать метод Add несколько раз.
Затем, когда ошибка будет устранена, небольшое изменение typeAlias позволит нам указать правильный тип, но я думаю, что оставлю как есть.