Was unsure how to make a sensible title for this post.
Say I have a class
[Export(typeof(IMessageSender))]
public class MessageSender : IMessageSender
{
    private IMessagingInterface _messagingInterface;
    private IEventAggregator _eventAggregator;
    [ImportingConstructor]
    public MessageSender(IMessagingInterface messagingInterface, IEventAggregator eventAggregator)
    {
        _messagingInterface = messagingInterface;
        _eventAggregator = eventAggregator;
    }
    public void SendMessage(string message)
    {
        _messagingInterface.Write(message);
    }
    public InterfaceStatus GetStatus()
    {
        return _messagingInterface.Status;
    }
    ...
    etc. Many methods in this class.
}
and I have several different IMessagingInterface, such as 
[Export(typeof(IMessagingInterface))]
public SerialPortInterface : IMessagingInterface
{
    ..
}
[Export(typeof(IMessagingInterface))]
public UdpInterface : IMessagingInterface
{
    ..
}
etc
In my application, I currently instantiate the different parts like this at the startup of my application:
eventAggregator = new EventAggregator();
batch.AddExportedValue<IMessageSender>("SerialPortSender", new MessageSender(new SerialPortInterface(), eventAggregator);
batch.AddExportedValue<IMessageSender>("UdpSender", new MessageSender(new UdpInterface (), eventAggregator);
... 
etc for the rest 
Then I can specify which one I want injected elsewhere by using the contract name.
However, I feel like doing this composition myself in the bootstrapper and creating instances with new is wrong and unnecessary, but I haven't found a way to do it differently.
 
     
     
    