使用MVVM Light实现C#XAML页面依赖注入

时间:2017-03-10 16:14:32

标签: xaml mvvm uwp mvvm-light uwp-xaml

我想要一些反馈,看看我是否以正确的方式使用SimpleIoc。 下面的代码有效,但我不确定它是否是最佳实践。

我有一个UWP XAML DocumentPage课程,我想在其上展示IRpcDocument

我想对DocumentPageRpcDocumentA使用RpcDocumentB。用户可以导航到两种类型的IRpcDocument。所以应用程序应该能够在两个“动态”之间切换。

所以我写了DocumentPageViewModel

public class DocumentPageViewModel : ViewModelBase
{
    public IRpcDocument RpcDocument;

    public DocumentPageViewModel(IRpcDocument rpcDocument)
    {
        RpcDocument = rpcDocument;
    }
}

我的ViewModelLocator

class ViewModelLocator
{
    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        SimpleIoc.Default.Register<DocumentPageViewModel>(); 
    }

    public DocumentPageViewModel SimpleIoc.Default.Register<DocumentPageViewModel>
    {
        get
        {
            return ServiceLocator.Current.GetInstance<SimpleIoc.Default.Register<DocumentPageViewModel>>(Guid.NewGuid().ToString());
        }
    }
}

当我导航到DocumentPage时,我打电话:

SimpleIoc.Default.Register<IRpcDocument , RpcDocumentA>();
await NavigationService.NavigateAsync(typeof(DocumentPage), DocumentIdParameter);

应用程序然后导航到DocumentPage,构造RpcDocumentA,进行必要的RPC调用以获取数据并显示文档。

第一行告诉IoC框架它应该在它的构造函数中期望一个RpcDocumentA,第二行触发导航。所以在这种情况下,我没有在静态ViewModelLocator()中注册接口。

因此,每次导航时,我都会调用SimpleIoc.Default.Register<IRpcDocument , RpcDocumentA>SimpleIoc.Default.Register<IRpcDocument , RpcDocumentB>

这有效,但这是正确的方法吗?我怀疑它不是。

0 个答案:

没有答案