在控件的构造函数中使用Catel ServiceLocator

时间:2014-10-29 10:43:32

标签: c# catel

我有GridControl并希望使用ServiceLocator.Default实例来检索控件的构造函数中的对象(例如IMessageService)。在运行时没有问题,但控件在设计时抛出异常 - 控件没有出现在Visual Studio设计器中。

对ServiceLocator.Default的非空检查没有帮助。如何在控制器的ctor中使用服务定位器并获得完全的设计支持?

public MyGridControl()
    {
        if (ServiceLocator.Default != null)
        {
            this.mySettingService = ServiceLocator.Default.ResolveType<IRosySettingService>();
            if (this.mySettingService != null)
            {
                var mediator = ServiceLocator.Default.ResolveType<IMessageMediator>();
                mediator.Register<String>(this, SaveSettings, MessageKeys.SaveGridSettings);
            }
        }
    }

public MyGridControl() { if (ServiceLocator.Default != null) { this.mySettingService = ServiceLocator.Default.ResolveType<IRosySettingService>(); if (this.mySettingService != null) { var mediator = ServiceLocator.Default.ResolveType<IMessageMediator>(); mediator.Register<String>(this, SaveSettings, MessageKeys.SaveGridSettings); } } }

谢谢!

的Stefan

1 个答案:

答案 0 :(得分:0)

您应该阻止代码在设计器中运行。你可以这样做:

public MyGridControl()
{
    if (CatelEnvironment.IsInDesignMode)
    {
        return;
    }

    // TODO: Use service locator and all runtime code
}