我开始使用Caliburn Micro Framework,我遇到了一个我认为框架作者可能有解决方案的问题,虽然我看不出它是什么。
假设我有一个父ViewModel而不是需要在运行时创建一个或多个子ViewModel。
如果父级具有相同的依赖关系,我的子ViewModel如何解析其依赖关系?
属性注入会保存我的父虚拟机不必知道他们孩子的依赖关系,但这只适用于接口属性,如果我用一堆无用的接口丢弃代码以适应依赖注入,那么我只是交易一个另一个问题。
答案 0 :(得分:0)
工厂模式将是一种方式。另一个可能是使用DI容器来解析子ViewModel的依赖关系,如果这些依赖关系是接口。
物业注入可能是另一种帮助您的方法,例如
public void SomeProperty(ISomeInterface aDependency)
{
// use the dependency. Dependency Not required when object creation
}
或延迟加载子ViewModel上的属性也可以帮助例如
private ISomeInterface aDependency;
public ISomeInterface MyDependency
{
get
{
if (aDependency == null)
aDependecy = new SomeConcreteClass();
return aDependency;
}
set { aDependency = value; }
}
答案 1 :(得分:0)
您可以使用MEF来解决这个问题,或者您可以使用SimpleContainer但是您不需要将SC作为依赖项,因为如果您将它用作容器,框架已经通过使用IoC静态知道它类。它有一个Get()方法。这将拉动您正在寻找的类型。问题是它必须在容器中。如果SimpleContainer或MEF或多或少抽象容器,IoC并不关心。
var sometype = IoC.Get<ThatType>();
MEF功能强大得多,如果做得好可以做依赖,但它也有自己的特性。
HTH