2010-08-16 16 views
9

Teşekkürler Spring.NET ile yapılandırmanın bir yolu var mı?Spring.NET ile Onayları Yapılandırma

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

o ProductTemplate ile yapılabilir Could: kodunda

Bu gibi görünüyor? Diğer yol? Benim için

cevap

2

, bu yapılandırma çalıştı:

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

Ben msmq sınıflarının (görünüşte) alakalı kısımları alay Bu örnekte. Enum'da biraz akıllı bir karşılaştırma elde etmek için expression kullanıyorum.

Eğer TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes)); kullanılarak Spring.Core.TypeResolution.TypeRegistry ile register the AcknowledgeType, ifade ayrıca basitlenerek ise:

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

Ben Spring.NET 1.3.1 karşı, aşağıdaki program ile test ettik:

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

Hangi çıkışlar:

Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive 
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive 
İlgili konular