MEFエクスポートに共有パート作成ポリシーを使用しようとしています。しかし、私が考えていたように動作するようには見えません。私はアプリケーションで2回作曲を行い、毎回オブジェクトの新しいコピーを取得します。オブジェクトインスタンシエーションにインスタンスカウンタを追加することでこれを証明しました。MEF作成ポリシー
static int instCount = 0;
public FakeAutocompleteRepository()
{
instCount++;
...
}
すべてをデバッグで実行しています。実際、私は輸出セクションが
[PartCreationPolicy(CreationPolicy.Shared)]
[Export(typeof(IAutocompleteRepository))]
[ExportMetadata("IsTesting", "True")]
class FakeAutocompleteRepository : IAutocompleteRepository
{ ... }
が含まれていinstCount = 2でFakeAutocompleteRepositoryの新しいコピーを取得構図を行う二回目はsubsiquent要求に対して同じインスタンスを取得するが、いくつかのトリックですか?私が作曲中に何かしている場合、これは私がやっていることです。
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog("."));
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
if (null != ConfigurationSettings.AppSettings["IsTesting"] && bool.Parse(ConfigurationSettings.AppSettings["IsTesting"]))
repository = container.GetExports<IAutocompleteRepository>().Where(expDef => expDef.Metadata.Keys.Contains("IsTesting")).Single().GetExportedObject();
基本的に私はテスト中に特定の曲を強制しようとしています。これらの作品を単体テストするための良いアイデアがあるなら、私はすべて耳にします。
私はまったく新しいコンテナを作成しています。アクティブなコンテナを照会する方法はありますか、またはアプリケーションごとにインスタンスを作成する必要がありますか? – stimms
アクティブなコンテナを照会する方法はありません。私は、あなたがすべきことについてアドバイスをするために、あなたのアプリケーションについてもっと理解しなければならないでしょう。複数のコンポジションは何ですか? –
できることホストからコンテナをエクスポートし、使用するたびにインポートします。私はそれをしていないが、私はMefShapesのゲームの例でそれを見たと思う... –