[英]Caliburn Micro - How can I inject dependencies into a ViewModel without requiring all its ancestors to have the same dependencies?
我开始使用Caliburn Micro Framework,但遇到一个问题,我认为框架作者可能有解决方案,尽管我看不出它是什么。
假设我有一个父ViewModel,而不需要在运行时创建一个或多个子ViewModel。
我的子级ViewModel如何在其父级没有相同依赖项的情况下解决其依赖关系?
属性注入将使我的父级VM不必了解其子级的依赖关系,但这仅适用于接口属性,如果我用一堆无用的接口来填充代码以适应依赖关系注入,那么我只是在将一个问题换成另一个。
工厂模式将是一种方式。 另一个可能是使用DI容器来解决子ViewModel上的依赖关系(如果这些依赖关系是接口)。
注入财产可能是帮助您的另一种方式,例如
public void SomeProperty(ISomeInterface aDependency)
{
// use the dependency. Dependency Not required when object creation
}
或子ViewModels上的属性的延迟加载也可能有帮助,例如
private ISomeInterface aDependency;
public ISomeInterface MyDependency
{
get
{
if (aDependency == null)
aDependecy = new SomeConcreteClass();
return aDependency;
}
set { aDependency = value; }
}
您可以使用MEF解决这个问题,也可以使用SimpleContainer,但是不需要将SC作为依赖项,因为如果您将SC用作容器,那么框架已经可以通过使用IoC静态类来了解它。 它具有一个Get()方法。 这将拉动您正在寻找的类型。 要注意的是它必须在容器中。 IoC不在乎它是SimpleContainer还是MEF,或多或少是抽象的容器。
var sometype = IoC.Get<ThatType>();
只要正确地装饰了要调用的类并在构建时将其成功拉入MEF容器,MEF便会允许[Import]作为属性。
MEF的功能强大得多,如果操作正确,它可以执行依赖关系,但是它也有自己的特质。
心连心
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.