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);

文档不是很详细,但我认为它不会被添加到容器中,因为您创建了对象,并且您保留了它的所有权。当容器被处置等时它不会被处置。

如果您希望它成为容器的一部分,您必须使用任一属性 [Export] 并将包含您的视图的程序集添加到目录中。或者,如果您不想使用属性,则可以使用新的 RegistrationBuilder。

于 2014-06-06T17:05:16.843 回答