最近、アプリケーションでMEFの使用を開始しましたが、MEFを使用したり、メインアプリケーション内で動作するクラスをテストしたりすることに問題はありません。ただし、アプリケーションのライセンスライブラリを作成し始めたばかりで、設定方法がわからないため、いくつかの問題が発生しました。
ライセンスライブラリには、LicenseManager、LicenseValidator、およびLicenseSignerクラスがあります。
public class LicenseManager
{
[Import]
private ILicenseValidator _validator;
[Import]
private ILicenseSigner _signer;
public LicenseManager()
{
var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
var container = new CompsitionContainer();
container.ComposeParts();
}
}
[Export(typeof(ILicenseSigner))]
public class LicenseSigner : ILicenseSigner
{
...
}
[Export(typeof(ILicenseValidator))]
public class LicenseValidator : ILicenseValidator
{
...
}
検証者と署名者の両方がnull
それらにアクセスした後です。
これは、LicenseManagerのコンストラクターがコンテナーを作成する前にLicenseManagerをインスタンス化しているためだと思います。ただし、LicenseManagerはクラスライブラリへの唯一のエントリポイントとして意図されているため、問題を解決する方法が完全にはわかりません。コンテナを初期化してLicenseManagerインスタンスを返すために、ある種のファクトリを作成することもできますが、その結果、ライブラリAPIの品質が低下します。
私はMEF全体に少し慣れていません。もっと上手くできることはありますか?メインアプリケーションでのすべてのMEFの読み込みを処理する方法はありますか?どんな解決策も、私が今持っている解決策の欠如よりも優れています。