0

次のコード行は、まったく何もせず、エラーもなく、何もしないようです。オブジェクトがコンテナのカタログにありません:

public void Initialize()
{
  if (AuthenticationModel.Current.Protocol.ToString() != GetType().Name.Replace(UnitTypeSuffix, ""))
  {
    return;
  }
  _container.ComposeExportedValue<ILoginView>(new LoginView());
}

チェックは、if複数のログイン モジュールを持っている可能性があり、指定されたものだけProtocolがコンテナーでビューを使用できるようにする必要があるためです。その後、他の動的にロードされたモジュールは、現在登録されているログイン ビューを要求できます。チェックはパスしてComposeExportedValue実行されますが、オブジェクトはコンテナに表示されません。

4

1 に答える 1

0

このようなことをすると、テスト オブジェクトを構成するときにログイン ビューが使用されることがわかります。

public class Test
{
    [Import]
    public ILoginView LoginView { get; set; }
}

var test = new Test();
container.ComposeExportedValue<ILoginView>(new LoginView());
container.SatisfyImportsOnce(test);

ドキュメントはあまり詳細ではありませんが、オブジェクトを作成し、その所有権を保持しているため、コンテナーに追加されないと思います。コンテナが破棄された場合などは破棄されません。

コンテナーの一部にしたい場合は、[エクスポート] 属性を使用し、ビューを含むアセンブリをカタログに追加する必要があります。または、属性を使用したくない場合は、新しい RegistrationBuilder を使用できます。

于 2014-06-06T17:05:16.843 に答える