首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Catel认证+ MahApps

Catel认证+ MahApps
EN

Stack Overflow用户
提问于 2015-07-06 16:51:07
回答 2查看 279关注 0票数 0

目前,我正在使用Catel+Orchestra地铁学习MahApps。我正在使用Catel.Examples项目使用MetroUI执行身份验证示例。我的问题是当我在MahAppsService中创建一个新的MahAppsService时

代码语言:javascript
运行
复制
        public FrameworkElement GetMainView()
    {
        return new MainWindow();
    }

MainWindowViewModel的构造函数从未被调用。

代码语言:javascript
运行
复制
public MainWindowViewModel(UIVisualizerService uiVisualizarService, IAuthenticationProvider authenticationProvider)
    {
        _uiVisualizerService = uiVisualizarService;
        _authenticationProvider = authenticationProvider;
        RoleCollection = new ObservableCollection<string>(new[] { "Read-Only", "Administrator" });
        ShowView = new Command(OnShowViewExecute, OnShowViewCanExecute, "ShowView");
    }

我已经将其缩小到构造函数的2依赖项。如果我移除UIVisualizerService和IAuthenticacionProvider依赖项,构造函数将被正确调用,但是ModelView稍后需要这两个服务。

我不知道该怎么做才能做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-08 15:50:33

我通过将视图模型显式注入到mainwindow构造函数中解决了这个问题。

代码语言:javascript
运行
复制
public MainWindow(MainWindowViewModel _mainwindowviewmodel):base(_mainwindowviewmodel)
 {
 InitializeComponent();
 }

向AuthenticationProvider类声明MahAppsService接口的字段。

代码语言:javascript
运行
复制
private readonly IAuthenticationProvider _authenticationProvider;

还将AuthenticationProvider接口的依赖性添加到构造函数中。

代码语言:javascript
运行
复制
 public MahAppsService(ICommandManager commandManager, IMessageService messageService, IUIVisualizerService uiVisualizerService, IAuthenticationProvider authenticationProvicer)
    {
        Argument.IsNotNull(() => commandManager);
        Argument.IsNotNull(() => messageService);
        Argument.IsNotNull(() => uiVisualizerService);
        Argument.IsNotNull(() => authenticationProvicer);
        _commandManager = commandManager;
        _messageService = messageService;
        _uiVisualizerService = uiVisualizerService;
        _authenticationProvider = authenticationProvicer;
    }

最后一步是在GetMainView中的MahAppsService类中创建视图模型的一个实例。

代码语言:javascript
运行
复制
 public FrameworkElement GetMainView()
 {
 var mainwindowViewModel = TypeFactory.Default.CreateInstanceWithParametersAndAutoCompletion<MainWindowView‌​Model>(_uiVisualizerService, _authenticationProvider);
 return new MainWindow(mainwindowViewModel);
 }

请注意,这可能不是最好的方法,但它可以完成工作。如果有人有更好的方法,可以自由地分享。

票数 0
EN

Stack Overflow用户

发布于 2015-07-06 17:25:25

您必须在IAuthenticationProvider中注册ServiceLocator:

代码语言:javascript
运行
复制
var serviceLocator = ServiceLocator.Default;

serviceLocator.RegisterType<IAuthenticationProvider, MyAuthenticationProvider>();

注意,Catel中的所有服务都会自动为您注册,但是您必须自己注册自己的服务(例如,使用ModuleInit或程序集中的其他入口点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31251416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档