MEFを使用するWPFアプリケーションを使用しています。しかし、以下のコードを実行しても(テストコードスニペットとして、コードのどこかにあります)、カタログは常に空です。すべてのサンプルコードは同じことを行っており、それらは正常に機能しています。しかし、私のものは機能していません。自分では理解できない重要なことが欠けています。だから、私はこれについていくつかの助けが欲しいです。
var catalog = new AggregateCatalog();        
var x = Assembly.GetExecutingAssembly().Location;
catalog.Catalogs.Add(
new DirectoryCatalog(
          Path.GetDirectoryName(
          Assembly.GetExecutingAssembly().Location)));
CompositionContainer container = new CompositionContainer(catalog);
これが実際のシナリオコードです。同じソリューションには3つのプロジェクトがあります。
- WPFプロジェクト。
 - 拡張プロジェクト。
 - 契約プロジェクト。
 
拡張プロジェクトにはエクスポートが含まれています。コントラクトプロジェクトには、WPFプロジェクトと拡張プロジェクトで共有されるインターフェイスが含まれています。
[Export("LoginManager", typeof(IEmployeeLoginManager))]
public class LoginManager : IEmployeeLoginManager
{
    public EmployeeLoginModel LoginEmployee(String userName, string password) 
    {
        DEmployeeLoginManager employeeLoginManager = new DEmployeeLoginManager();
        return employeeLoginManager.LoginEmployee(userName, password);
    }
}
このエクスポートは、以下のようにWPFプロジェクトで使用されます。
public partial class LoginWindow
{
    public EmployeeLoginModel LoggedInEmployee;
    [Import("LoginManager",AllowDefault = true)]
    private IEmployeeLoginManager LoginManager;
    public LoginWindow()
    {
        InitializeComponent();
    }
    private void RadWindow_Closed_1(object sender, Telerik.Windows.Controls.WindowClosedEventArgs e)
    {
        Application.Current.Shutdown();
        Environment.Exit(0);
        return;
    }
    private void RadButton_Click_1(object sender, RoutedEventArgs e)
    {
        string passWord = PasswordText.Password;
        LoggedInEmployee.Password = passWord;
        var container = MEFLoader.GetMEFContainer();
        container.ComposeParts(this);
        EmployeeLoginModel employee= LoginManager.LoginEmployee(LoggedInEmployee.UserName, passWord);
        if (employee.LoginStatus == true) 
        {
            this.Close();
        }
    }
PS:これはMEFLoaderクラスです:
public static class MEFLoader
{
    public static CompositionContainer GetMEFContainer() 
    {
        var catalog = new AggregateCatalog(new DirectoryCatalog("."), new AssemblyCatalog(Assembly.GetExecutingAssembly()));
        var container = new CompositionContainer(catalog);
        return container as CompositionContainer;
    }
}
私はMEFを初めて使用し、コードの改善点にも感謝しています。
前もって感謝します。