"IXXXX уже зарегистрирован" - MVVM-Light
Я использую mvvm-light
для моего приложения WP8.
Я продолжаю получать IXXXXX is already registered
ошибка, и если я использую это решение: http://developingux.com/2012/06/10/how-to-fix-error-design-time-data-in-blend-with-mvvm-light/
Ошибка исчезла, но теперь я не вижу никаких данных дизайна в Visual Studio и Blend.
Мой вид-модель-локатор IContentService
не поднять ошибку, только IFeedAPI
):
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
if (SimpleIoc.Default.IsRegistered<IFeedAPI>())
{
SimpleIoc.Default.Unregister<IFeedAPI>();
}
SimpleIoc.Default.Register<IFeedAPI, DesignData.DesignFeedAPI>();
SimpleIoc.Default.Register<IContentService, DesignData.DesignContentService>();
}
else
{
SimpleIoc.Default.Register<IContentService, LocalContentService>();
SimpleIoc.Default.Register<IFeedAPI, FeedlyFeedAPI>();
}
SimpleIoc.Default.Register<ContentControlViewModel>();
}
public ContentControlViewModel ContentControlVm
{
get
{
return ServiceLocator.Current.GetInstance<ContentControlViewModel>();
}
}
public static ViewModelLocator Instance
{
get
{
return Application.Current.Resources["Locator"] as ViewModelLocator;
}
}
}
Когда я не использую контейнер IoC, как показано ниже, все работает отлично (без ошибок и полностью проектные данные).
public class ViewModelLocator
{
private ContentControlViewModel _contentControlVm;
public ContentControlViewModel ContentControlVm
{
get
{
if(_contentControlVm == null)
{
IContentService contentService = null;
IFeedAPI feedApi = null;
if (ViewModelBase.IsInDesignModeStatic)
{
contentService = new DesignData.DesignContentService();
feedApi = new DesignData.DesignFeedAPI();
}
else
{
contentService = new LocalContentService();
feedApi = new FeedlyFeedAPI();
}
_contentControlVm = new ContentControlViewModel(contentService, feedApi);
}
return _contentControlVm;
}
}
public ViewModelLocator()
{
}
public static ViewModelLocator Instance
{
get
{
return Application.Current.Resources["Locator"] as ViewModelLocator;
}
}
}
}
Есть идеи??