Я до сих пор понятия не имею, что происходит, но мне удалось это исправить. я использовал стороннюю библиотеку начальной загрузки для регистрации своих компонентов и сопоставлений. но после того, как я справился с MEF и сам контролировал регистрации, проблема исчезла. Я предполагаю, что он делал что-то напуганное, избавляясь от вещей, которых не должно было быть. спасибо за помощь.
В случае, если кто-то сталкивается с этой проблемой, используйте http://bootstrapper.codeplex.com/ со следующим объявлением:
Bootstrap.Bootstrapper
.With.Unity()
.And.AutoMapper()
.And.ServiceLocator()
.Start();
Я заменил это на:
IUnityContainer container = new UnityContainer();
MEFContainer mefContainer = new MEFContainer();
mefContainer.UnityRegistry.ForEach(x => x.Register(container));
container.RegisterInstance<IMappingEngine>(Mapper.Engine);
mefContainer.AutoMapperRegistry.ForEach(x => x.CreateMap(Mapper.Configuration));
, где
private class MEFContainer
{
[ImportMany(typeof(IUnityRegistration))]
public List<IUnityRegistration> UnityRegistry { get; set; }
[ImportMany(typeof(IMapCreator))]
public List<IMapCreator> AutoMapperRegistry { get; set; }
public MEFContainer()
{
var catalog = new DirectoryCatalog("bin");
var compositionContainer = new CompositionContainer(catalog);
compositionContainer.ComposeParts(this);
}
}
Обратите внимание, что IUnityRegistration.Register () и IMapCreator.CreateMap () определены в стороннем коде. MEF ссылки System.ComponentModel.Composition
и System.ComponentModel.Composition.Hosting. Будет в конечном итоге рефакторинг.