Я создал контейнер MEF, который создает сервис. Я строю другой контейнер MEF с этими службами из первого контейнера. Проблема в том, что эти сервисы перекомпоновываются при добавлении во второй контейнер.
[Export(typeof(IFoo))]
public class Foo : IFoo
{
[Import(typeof(IServiceA))]
public IServiceA A { get; set; }
}
[Export(typeof(IServiceA))]
public class ServiceAImpl : IServiceA
{
public ServiceAImpl()
{
Console.Out.WriteLine("Service A Created");
}
}
//Create the parent container
var parentContainer = new CompositionContainer(Composer.AggregateCatalog);
IFoo foo = parentContainer.GetExportedValue<IFoo>();
//..... some work
//Create a child container providing it an existing instance of IFoo
var childContainer = new CompositionContainer(Composer.AggregateCatalog);
var batch = new CompositionBatch();
batch.AddPart(foo); //Add existing IFoo
//This causes a recomposition of IFoo resulting in
//a new instance of IServiceA to be created and injected
childContainer.Compose(batch);
«Service A Created» вызывается дважды в последней строке выше, когда контейнер создает композицию, потому что он пытается перекомпоновать Foo, чего я не хочу.
У кого-нибудь есть решение этого? Я пытался явно указать AllowRecomposition = false, но это тоже не работает.