Solved

Interface Switch Form1?

Posted on 2013-01-19
9
293 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
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

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

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
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 Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

777 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