Solved

Interface Switch Form1?

Posted on 2013-01-19
9
296 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 2
9 Comments
 
LVL 36

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
The Orion Papers

Are you interested in becoming an AWS Certified Solutions Architect?

Discover a new interactive way of training for the exam.

 
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
 

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 36

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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…

690 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