Я начинаю новый проект Silverlight на данный момент, и у меня возникают проблемы, когда Unity бросает исключение, если мой ViewModel (который он создает для меня) содержит событие RaisePropertyChanged.Silverlight, Unity и INotifyPropertyChanged
Я выглядит следующим образом:
public class AddNewClientViewModel : ViewModelBase {
private Visibility _extraClientFieldsVisible;
public Visibility ExtraClientFieldsVisible {
get {
return _extraClientFieldsVisible;
}
set {
_extraClientFieldsVisible = value;
base.RaisePropertyChanged("ExtraClientFieldsVisible");
}
}
public AddNewClientViewModel(IMyInterface blah) {
ExtraClientFieldsVisible = Visibility.Collapsed;
}
ViewModelBase который наследуемый выглядит так:
public abstract class ViewModelBase : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Полный трассировки стека отмечено ниже, но мне кажется, что называть это событие RaisePropertyChanged во конструкторе заставляет Unity раздуваться.
Вот полный трассировки стека ошибки:
Microsoft.Practices.Unity.ResolutionFailedException was unhandled by user code
Message="Resolution of the dependency failed, type = \"ClientSide.ViewModels.AddNewClientViewModel\", name = \"\". Exception message is: The current build operation (build key Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]) failed: Object reference not set to an instance of an object. (Strategy type BuildPlanStrategy, index 3)"
TypeRequested="AddNewClientViewModel"
StackTrace:
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name)
at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name)
at Microsoft.Practices.Unity.UnityContainerBase.Resolve(Type t)
at Microsoft.Practices.Unity.UnityContainerBase.Resolve[T]()
at ClientSide.Framework.ServiceLocator.get_AddNewClientViewModel()
InnerException: Microsoft.Practices.ObjectBuilder2.BuildFailedException
Message="The current build operation (build key Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]) failed: Object reference not set to an instance of an object. (Strategy type BuildPlanStrategy, index 3)"
BuildKey="Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]"
ExecutingStrategyIndex=3
ExecutingStrategyTypeName="BuildPlanStrategy"
StackTrace:
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
InnerException: System.NullReferenceException
Message="Object reference not set to an instance of an object."
StackTrace:
at ClientSide.ViewModels.ViewModelBase.RaisePropertyChanged(String propertyName)
at ClientSide.ViewModels.AddNewClientViewModel.set_ExtraClientFieldsVisible(Visibility value)
at ClientSide.ViewModels.AddNewClientViewModel..ctor(IDataCore dataCore)
at BuildUp_ClientSide.ViewModels.AddNewClientViewModel(IBuilderContext)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
InnerException:
Так что я ударяя NullReferenceException. Я не могу просто понять, как ...
Я действительно .. идиот .. смотрел на это слишком долго .. спасибо. – ChadT
Не волнуйся - мы все были там :) –