Используя выражение Spring , ваша конфигурация может выглядеть следующим образом:
<object id="myObject" type="q6932134.ServiceClient, q6932134">
<constructor-arg name="requiredServices">
<list element-type="string">
<expression value="MyConstants.ServiceA" />
<expression value="MyConstants.ServiceB" />
</list>
</constructor-arg>
</object>
Это очень близко подходит к желаемой конфигурации в вашем вопросе: -)
Длячтобы это работало, вам нужно зарегистрировать ваш тип MyConstants
с пружиной;поместите следующий код где-нибудь в вашей основной программе:
TypeRegistry.RegisterType("MyConstants", typeof(MyConstants));
Следующая альтернативная конфигурация позволяет вам использовать ссылку на объект, почти так же, как в вашем собственном ответе.Это делает конфигурацию более многословной, но имеет то преимущество, что ваши файлы конфигурации становятся менее чувствительными к переименованию ваших констант в коде:
<object id="svca" type="string">
<constructor-arg expression="MyConstants.ServiceA" />
</object>
<object id="svcb" type="string">
<constructor-arg expression="MyConstants.ServiceB" />
</object>
<object id="myObject" type="q6932134.ServiceClient, q6932134">
<constructor-arg name="requiredServices">
<list element-type="string">
<ref object="svca" />
<ref object="svcb" />
</list>
</constructor-arg>
</object>
Если вам не нравится регистрировать вашу MyConstants
программно, вы можетеизмените выражение следующим образом:
<constructor-arg expression="T(MyNamespace.MyConstants).ServiceA" />