我有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
答案 0 :(得分:0)
您应该阻止代码在设计器中运行。你可以这样做:
public MyGridControl()
{
if (CatelEnvironment.IsInDesignMode)
{
return;
}
// TODO: Use service locator and all runtime code
}