2010-08-16 23 views
9

Có cách nào để định cấu hình Lời cảm ơn với Spring.NET không?Định cấu hình Lời cảm ơn với Spring.NET

Trong mã nó trông như thế này:

var msgQ = new MessageQueue(OrdersQueueName) 
      { 
      DefaultPropertiesToSend = 
      { 
       AcknowledgeType = AcknowledgeTypes.FullReachQueue | 
           AcknowledgeTypes.FullReceive, 
       AdministrationQueue = new MessageQueue(AckQueueName) 
      } 
      }; 

Nó có thể được thực hiện với sự ProductTemplate? Cách khác?

Trả lời

2

Đối với tôi, cấu hình này làm việc:

<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> 

Trong ví dụ này tôi chế giễu (rõ ràng) phần liên quan của các lớp msmq. Tôi sử dụng số expression để so sánh một chút về enum.

Nếu bạn register the AcknowledgeType với Spring.Core.TypeResolution.TypeRegistry sử dụng TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));, khái niệm đơn giản hoá hơn nữa để:

<property name="AcknowledgeType" 
      expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" /> 

Tôi đã thử nghiệm nó với các chương trình sau đây, đối với 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 
    } 
} 

Kết quả đầu ra nào:

Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive 
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive 
Các vấn đề liên quan