2015-05-06 5 views
0

У меня очень странная проблема. В настоящее время я переношу Windows Universal App (Win 8.1 + WinPhone 8.1) с Prism на решение CrossPlattform с MvvmCross. Во-первых, большое спасибо за всю работу с MvvmCross - это потрясающе.Активатор с MvvmCross и PCL

Моя проблема теперь с классом System.Activator. Я использовал this approach для моей проверки в моем универсальном приложении, и я попытался его портировать. Теперь все компилируется отлично, но во время выполнения генерируется исключение с нулевым значением. Я понял, что это Acitivator, который является нулевым. При попытке доступа к нему в Immediate окнах говорит:

error CS0103: The name 'Activiator' does not exist in the current context 

код выполняется в каждой модели и реализован в конструктор базового класса:

protected ModelBase() 
{ 
    foreach (var property in this.GetType().GetRuntimeProperties()) 
    { 
     var type = typeof(Property<>).MakeGenericType(property.PropertyType); 
     var prop = (IProperty)Activator.CreateInstance(type); 
     this.Properties.Add(property.Name, prop); 
     prop.ValueChanged += (s, e) => 
     { 
      RaisePropertyChanged(property.Name); 
      Validate(); 
     }; 
    } 
} 

Любые идеи?

+3

'Активатор' ошибочно написано в сообщении об ошибке, но я предполагаю, что это опечатка, когда вы ввели свой вопрос? :-) –

+1

MvvmCross сам использует активатор в порядке - например. https://github.com/MvvmCross/MvvmCross/blob/c306ba37afd9024f68b7a4f1fedcaf4cf7d01b8d/CrossCore/Cirrious.CrossCore/Platform/MvxBootstrapRunner.cs#L32 и https://github.com/MvvmCross/MvvmCross/blob/c306ba37afd9024f68b7a4f1fedcaf4cf7d01b8d/Cirrious/Cirrious. MvvmCrossBinding/Binders/MvxNamedInstanceRegistryFiller.cs # L90 и ... – Stuart

ответ

0

Спасибо за все ответы. Сейчас я чувствую себя немного смущенным, потому что я решил проблему, и это была моя ошибка :).

@ Андерс: Вы были правы, я набрал Активатор в окне «Немедленное окно», и именно поэтому ошибка была в первую очередь - глупо.

Второй проблемой был ctor сгенерированного объекта.

public Property() 
{ 
    this.Errors.CollectionChanged += (s, e) => RaisePropertyChanged("IsValid"); 
    Errors = new ObservableCollection<string>(); 
} 

Обнаружили ошибку? Jap, подключение к событию на не созданном объекте - плохая идея. Извините за потраченное время:/и спасибо.

Смежные вопросы