A new MEF error I've not seen before -- "The export is not assignable to type..."
Posted
by
Dave
on Stack Overflow
See other posts from Stack Overflow
or by Dave
Published on 2010-12-22T23:49:07Z
Indexed on
2010/12/22
23:54 UTC
Read the original article
Hit count: 201
I was very surprised to get this error today, as it's one that I've never encountered before. Everything in the code looked okay, so I did some searches. The previous questions and their respective answers didn't help.
This one was solved when the poster made sure his assembly references were consistent. I don't have this issue right now because I'm currently referencing another project in my solution.
This one was solved when the poster was instructed to use ImportMany, but I am already using it (I think properly, too) to try to load multiple plugins
This one was solved when the poster realized that there was a platform target mismatch. I've already gone through my projects to ensure that everything targets x86.
So here's what I am trying to do. I have a plugin that owns a connection to a device. I might also need to be able to share that connection with another plugin. I decided that the cleanest way to do this was to create an interface that would allow the slave plugin to request its own connection to the device. Let's just call it IConnectionSharer
. If the slave plugin does not need to borrow this connection and has its own, then it should use its own implementation of IConnectionSharer
to connect to the device.
My "master" plugin (the one that owns the connection to the device) implements IConnectionSharer
. It also exports this via ExportAttribute.
My "slave" plugin assembly defines a class that also implements and exports IConnectionSharer
.
When the application loads, the intent is for my slave plugin, via MEF, to enumerate all IConnectionSharer
s and store them in an IEnumerable<IConnectionSharer>
. It does so like this:
[ImportMany]
public IEnumerable<IConnectionSharer> AllSharedConnections { get; set; }
But during part composition, I get the error the export 'Company.MasterPlugin (ContractName="IConnectionSharer")' is not assignable to type 'IConnectionSharer'.
The error message itself seems clear enough -- it's as if MEF thinks my master plugin doesn't inherit from IConnectionSharer... but it does! Can anyone suggest further debugging strategies? I'm going to start the painful process of single stepping through the MEF source.
© Stack Overflow or respective owner