使用此基本ctor从应用导航到baseview模型时出现问题

时间:2018-12-10 07:44:36

标签: mvvmcross

我在 baseviewmodel 上有一个基类。

我面临的是在调试时在6.2上实现的navigationservice,显示导航到另一个视图模型时出现问题。

调试显示用户对话框中断。

以这种方式使用基类和那些参数是否存在问题。有人遇到这种问题

        public BaseViewModel(IMvxNavigationService navigationService, 
                             ILoginService loginService,
                             UserDialogs userDialogs, IValidator validator) {
            _navigationService = navigationService;
            _loginService = loginService;
            _userDialogs = userDialogs;
            _validator = validator;
            Title = TextSource.GetText(StringResourceKeys.Title);
            IsBusyMessage = Resources.Strings.LoadingMesssage;
        }

使用这样的gettext提供程序

公共类ResourcexTextProvider:IMvxTextProvider     {         私有只读ResourceManager _resourceManager;

    public ResourcexTextProvider(ResourceManager resourceManager)
    {
        _resourceManager = resourceManager;
        CurrentLanguage = CultureInfo.CurrentUICulture;
    }

    public CultureInfo CurrentLanguage { get; set; }

    public string GetText(string namespaceKey, string typeKey, string name)
    {
        string resolvedKey = name;

        if (!string.IsNullOrEmpty(typeKey))
        {
            resolvedKey = $"{typeKey}.{resolvedKey}";
        }

        if (!string.IsNullOrEmpty(namespaceKey))
        {
            resolvedKey = $"{namespaceKey}.{resolvedKey}";
        }

        return _resourceManager.GetString(resolvedKey, CurrentLanguage);
    }

    public string GetText(string namespaceKey, string typeKey, string name, params object[] formatArgs)
    {
        string baseText = GetText(namespaceKey, typeKey, name);

        if (string.IsNullOrEmpty(baseText))
        {
            return baseText;
        }

        return string.Format(baseText, formatArgs);
    }

    public bool TryGetText(out string textValue, string namespaceKey, string typeKey, string name)
    {
        throw new System.NotImplementedException();
    }

    public bool TryGetText(out string textValue, string namespaceKey, string typeKey, string name, params object[] formatArgs)
    {
        throw new System.NotImplementedException();
    }
}

}

1 个答案:

答案 0 :(得分:1)

您正试图将UserDialogs userDialogs的ctor中插入BaseViewModel。我的猜测是您错过了注册userDialogs的机会。

首先,您应该注入接口而不是实现,以提高可维护性:

Mvx.IocConstruct.RegisterType<IUserDialogs, UserDialogs>();

如果我的猜测是正确的,并且您使用的是Acr.UserDialogs,则应该将initialize itregister it设置为:

Mvx.IoCProvider.RegisterSingleton<IUserDialogs>(() => UserDialogs.Instance);

然后您可以使用界面直接将其注入任何ViewModel中:

public BaseViewModel(IMvxNavigationService navigationService, 
                     ILoginService loginService,
                     IUserDialogs userDialogs, 
                     IValidator validator) {
        _navigationService = navigationService;
        _loginService = loginService;
        _userDialogs = userDialogs;
        _validator = validator;
        Title = TextSource.GetText(StringResourceKeys.Title);
        IsBusyMessage = Resources.Strings.LoadingMesssage;
    }

HIH