ImportMany возвращает все классы, полученные из интерфейса - PullRequest
0 голосов
/ 11 декабря 2018

Team, мы внедрили MEF (новичок в этой концепции).Наша структура представляет собой интерфейс

 public interface IAction
{
    string DoPostUpdate(BaseSchema baseClass);

} 

Создан один абстрактный класс как

   [Export(typeof(IAction))]
public abstract class BaseActions : IAction
{
    public virtual string DoPostUpdate(BaseSchema baseClass)
    {
        return "Inside abstract method";
    }
}

И два класса, производные от этого абстрактного класса

[Export(typeof(IAction))]

public class GroupActions : BaseActions
{
    public override string DoPostUpdate(BaseSchema baseClass)
    {
        return "Inside Group Action export";
    }

}

[Export(typeof(IAction))]
    public class PartyActions : BaseActions
    {
        public override string DoPostUpdate(BaseSchema baseClass)
        {

            return "Inside Party Action export";
        }
    }

Инициализация контейнера выполняется вотдельный проект как -

 private CompositionContainer _container;
    [ImportMany(typeof(IAction))]
    public List<IAction> actionContract;

        if (actionContract == null)
        {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(T).Assembly));
            catalog.Catalogs.Add(new DirectoryCatalog(Settings.Default.ActionPluginPath));
            _container = new CompositionContainer(catalog);

            try
            {
                this._container.ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                //  Console.WriteLine(compositionException.ToString());
            }
        }

Теперь после инициализации actionContract объект содержит в себе оба объекта класса.

Теперь наш вопрос, как мы можем назвать PartyAction класса или GroupAction класс DoPostUpdate только в этой структуре?

Можете ли вы, пожалуйста, руководство?

...