我想要一些反馈,看看我是否以正确的方式使用SimpleIoc。 下面的代码有效,但我不确定它是否是最佳实践。
我有一个UWP XAML DocumentPage
课程,我想在其上展示IRpcDocument
。
我想对DocumentPage
和RpcDocumentA
使用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>
这有效,但这是正确的方法吗?我怀疑它不是。