Solved

Interface Switch Form1?

Posted on 2013-01-19
9
292 Views
Last Modified: 2013-01-26
I have the following code on Form1 to use one of two Queue interfaces. I currently use this code to switch between queues. My 'Proposed Switching' class does choose the correct queue interface, I just cannot call the interface methods like Enqueue(), Dequeue(), Peek(), etc... Help!

[Form1 code]          
        private MsmqSwitch _mqueue = new MsmqSwitch();

         private void btnLogin_Click(object sender, EventArgs e)
        {
            QueueType queueType;

            if (rbtRegularQueue.Checked)
                queueType = QueueType.NonTransactional;
            else
                queueType = QueueType.Transactional;

            _mqueue.Login(queueType, queueString);
        }

        private void btnSendMsg_Click(object sender, EventArgs e)
        {         
             _mqueue.Enqueue(txtMessage.Text, "message label here"); //Cannot Call 'Enqueue'
        }

Open in new window


[Switching class]
 

public enum QueueType { NonTransactional = 1, Transactional = 2 };

  public class MsmqSwitch : IMsmQueue, IMsmQueueTrans
  {
        IMsmQueue _mqueue;
        IMsmQueueTrans _mqueueTrans;

        public MessageQueue Login(QueueType QueueType, string queueString)
        {
            switch (QueueType)
            {
                case QueueType.NonTransactional:
                    _mqueue = new MsmQueue(queueString);
                    return (MessageQueue)_mqueue;
                    
                case QueueType.Transactional:
                    _mqueueTrans = new MsmQueueTrans(queueString);
                    return (MessageQueue)_mqueueTrans;                                 
            }
            return null;
        }
    }

Open in new window

0
Comment
Question by:pointeman
  • 6
  • 2
9 Comments
 
LVL 35

Expert Comment

by:Miguel Oz
ID: 38797081
The MessageQueue class (.NET) does not contain IMsmQueue or IMsmQueueTrans. thus the reason your code does not work.
Change your switch class as follows: (only if MsmQueue and MsmQueueTrans are subclasses of MessageQueue)
public class MsmqSwitch : IMsmQueue, IMsmQueueTrans  
  {
        MessageQueue _mqueue;
        MessageQueue _mqueueTrans;

        public MessageQueue Login(QueueType QueueType, string queueString)
        {
            switch (QueueType)
            {
                case QueueType.NonTransactional:
                    _mqueue = new MsmQueue(queueString);
                    return _mqueue;
                    
                case QueueType.Transactional:
                    _mqueueTrans = new MsmQueueTrans(queueString);
                    return _mqueueTrans;                                 
            }
            return null;
        }
    }

Open in new window

0
 

Author Comment

by:pointeman
ID: 38797125
Yea, I know. Those are my classes which use MessageQueue class. I need to switch between the two interfaces I built.
0
 

Author Comment

by:pointeman
ID: 38797131
I've been reading about loosely coupled interface programming although not sure it apples here.
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 38797802
I'm not even sure how that would compile. Your MsmqSwitch class proclaims to implement the IMsmQueue and IMsmQueueTrans interfaces, but you haven't shown anything that would indicate you did implement such. Is this the complete code for the MsmqSwitch class?
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

Author Comment

by:pointeman
ID: 38798387
Yea, the IMsmQueue and IMsmQueueTrans are part my first idea. I forgot to remove them from on cut-n-paste. I'm trying to build a component for .net usage. There are two Interfaces (which you noticed), each performs very well, just need a way to swap them and still access each methods. Also trying to eliminate unnecessary code.
0
 

Accepted Solution

by:
pointeman earned 0 total points
ID: 38799500
0
 
LVL 35

Expert Comment

by:Miguel Oz
ID: 38799551
Unless IMsmQueue and IMsmQueueTrans or its classes have a base interface or class, you can not use your current code as is.
Please post IMsmQueue and IMsmQueueTrans and their respective class declarations (I only need propertiies and method signatures)
0
 

Author Comment

by:pointeman
ID: 38801656
0
 

Author Closing Comment

by:pointeman
ID: 38821804
Example 2 is a perfect answer if using nearly identical Interfaces like me. Take a look...
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

896 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now