.NET Framework 4.0のSystem.ComponentModel.Compositionを使用して、Visual Studio 2010ベータ2でManaged Extensibility Frameworkをはじめて試しています。使用可能なアセンブリを使用するようにMEFに指示します
以下の2つの代替ルーチンを使用して、実装アセンブリを見つけるためにCompositionContainerを取得できませんでした。
最初の試み(これはMEFの古いCodePlexのリリースで働いていた):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
第二の試み(これはベータ1で働いていた、私は思う):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
は、新しい方法がありますベータ2でこれを行うには?
編集:これは構成とは関係がないことが判明しました。
されている必要があります[Import] public static ILog Log { get; set; }
:私は私のインポート実装表す静的プロパティました
[Import] public ILog Log { get; set; }
を受け入れたように、より徹底したファッションでのデバッグの賢者の助言が問題を解決したので、私はダニエルの答えをマーク。
私は数週間前からベータ2を使用していましたが、問題なく2番目の例を使用しています。実行中のアセンブリに内部部品がありますか、それともBaseDirectoryに配置されていますか? AppDomain.CurrentDomain.BaseDirectoryが実行時にマップするものを確認できましたか?また、上記のスニペットを含むクラスには宣言されたImportsが含まれていますか?クラスのインスタンス(これ)にインポートがない場合は何も選択されないので、確実に確認してください – JamesEggers
私は何かダフットをしているに違いありません。私はそれを働かせようとしている間、実装は簡単です。 BaseDirectoryは有効で、クラスにはインポートがあります。それでも、もう少し頭を悩ませて、私は最後にそこに着くでしょう。 – grenade
静的なプロパティに[インポート]を使用できない理由を誰でも説明できますか? – Dave