,이 구성은 일 :
<objects xmlns="http://www.springframework.net">
<!-- for http://stackoverflow.com/questions/3491152/configuring-acknowledgements-with-spring-net -->
<object name="orders" type="q3491152.MessageQueue, q3491152">
<property name="Name" value="orders-from-xml" />
<property name="DefaultPropertiesToSend">
<object type="q3491152.PropertiesToSend, q3491152">
<property name="AdministrationQueue" ref="anotherQ" />
<property name="AcknowledgeType"
expression="T(q3491152.AcknowledgeTypes).FullReachQueue or T(q3491152.AcknowledgeTypes).FullReceive" />
</object>
</property>
</object>
<object name="anotherQ" type="q3491152.MessageQueue, q3491152">
<property name="Name" value="anotherQ" />
</object>
</objects>
을 나는 MSMQ 클래스의 (분명히) 관련 부분을 조롱이 예에서. 을 사용하여 열거 형에 대한 비트 별 비교를 얻습니다.
당신은 TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));
를 사용하여 Spring.Core.TypeResolution.TypeRegistry
와 register the AcknowledgeType
, 표현은 더로 단순화 경우
<property name="AcknowledgeType"
expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" />
나는 Spring.NET 1.3.1에 대해, 다음과 같은 프로그램을 테스트했습니다
using System;
using Spring.Context;
using Spring.Context.Support;
namespace q3491152
{
internal class Program
{
private static void Main(string[] args)
{
IApplicationContext ctx = new XmlApplicationContext("objects.xml");
var qFromCode = new MessageQueue
{
Name="orders-from-code",
DefaultPropertiesToSend =
{
AcknowledgeType = AcknowledgeTypes.FullReachQueue |
AcknowledgeTypes.FullReceive,
AdministrationQueue = new MessageQueue()
}
};
var qFromXml = (MessageQueue) ctx.GetObject("orders");
PrintQ(qFromCode);
PrintQ(qFromXml);
Console.ReadLine();
}
private static void PrintQ(MessageQueue q)
{
Console.WriteLine("Q: {0}; AcknowledgeType: {1}", q.Name, q.DefaultPropertiesToSend.AcknowledgeType);
}
}
public class MessageQueue
{
public MessageQueue()
{
DefaultPropertiesToSend = new PropertiesToSend();
}
public string Name { get; set; }
public PropertiesToSend DefaultPropertiesToSend { get; set; }
}
public class PropertiesToSend
{
public AcknowledgeTypes AcknowledgeType { get; set; }
public MessageQueue AdministrationQueue { get; set; }
}
[Flags]
public enum AcknowledgeTypes
{
None = 0,
FullReachQueue,
FullReceive
}
}
어느 출력 :
Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive