При создании или использовании метода ExportProvider.GetExportedValues. Исключено изложениеContractMismatchException. Я конвертирую устаревший код, который был полон статическими фабриками, поэтому я просто хочу, например, выставить возвращаемые значения в контейнер MEF.
namespace fooProject
{
static class SomeExportFactory
{
[Export(typeof(IFoo))]
public static FooImp Generate()
{
return new FooImp();
}
}
}
Таким образом, эта простая иллюстрация создала бы исключение с этим сообщением "Невозможно использовать базовое экспортированное значение типа fooProject.SomeExportFactory.Generate(ContractName =" IFoo ") для ввода" IFoo "." для ввода "IFoo".].
Какие-нибудь догадки о том, что может быть причиной этого? Я уже просматривал Интернет и CompositionContractMismatchException при попытке использовать MEF с контроллером MVC - это закрытие, которое я могу найти, но у меня нет дубликатов сборок, подобных в этом случае.
Хорошо, я нашел ответ. Не экспортируйте статические функции !!!. Надеюсь, это поможет кому-то еще в этой ситуации.
MEF выдает критическое исключение, если вы пытаетесь экспортировать статическую функцию. Исключение выглядит как потенциально дублированные сборки. Как и некоторые ответы, но, увы.
Для людей, которые заинтересованы в более подробной информации, читайте (ссылки на текущие реализации MEF предоставляются). Код тормозит в ContractServices.cs. Вы найдете публичную статическую функцию "TryCast". Он обеспечивает механизм для MEF, чтобы предоставить экземпляр объекта, помещенного в бокс, к указанному типу. Но он проверяет только на 2 условия. Во-первых, объект, переданный в, уже имеет желаемый тип. Во-вторых, объект предоставляется через ExportedDelegate (возможно, как работает функция-член). Если ваш экспорт не соответствует ни одному из них, возвращается false, и сразу же возникает исключение CompositionContractMismatchException (см. Функцию ExportServices.cs T CastExportedValue (объект ICompositionElement, object exportedValue)).
Я бы хотел, чтобы в этой ситуации было выбрано DummyDontUseStaticException: p