为什么ComposeExportedValue不将我的对象插入容器?

时间:2014-06-02 11:33:32

标签: dependency-injection prism mef prism-5

我有以下代码行似乎什么都不做,没有错误,什么也没做。该对象不在容器的目录中:

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

if检查是因为我可能有多个登录模块,只有Protocol指定的模块必须使其在容器中可用。然后其他动态加载的模块可以只询问当前注册的登录视图。检查通过并ComposeExportedValue执行,但该对象在容器中不可见。

1 个答案:

答案 0 :(得分:0)

如果您执行此类操作,您将看到它在编写测试对象时确实使用了您的登录视图:

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

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

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

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