Fody.PropertyChanged - не удалось внедрить метод EventInvoker - PullRequest
0 голосов
/ 27 марта 2019

У меня есть ConfigurationViewModel, которая наследуется от BaseViewModel. BaseViewModel размещается в отдельном проекте и имеет реализованный интерфейс INotifyPropertyChanged. В этом отдельном проекте не установлен Fody.PropertyChanged.

Когда я пытаюсь построить решение, у меня возникает исключение:

Failed to execute weaver C:\Users\Rafal\.nuget\packages\propertychanged.fody\2.6.0\build\..\netclassicweaver\PropertyChanged.Fody.dll
Type:
System.Exception
StackTrace:
   at InnerWeaver.ExecuteWeavers() in C:\projects\fody\FodyIsolated\InnerWeaver.cs:line 186
   at InnerWeaver.Execute() in C:\projects\fody\FodyIsolated\InnerWeaver.cs:line 109
Source:
FodyIsolated
TargetSite:
Void ExecuteWeavers()
Could not inject EventInvoker method on type 'Designer.VVM.ConfigurationViewModel'. It is possible you are inheriting from a base class and have not correctly set 'EventInvokerNames' or you are using a explicit PropertyChanged event and the event field is not visible to this instance. Either correct 'EventInvokerNames' or implement your own EventInvoker on this class. If you want to suppress this place a [DoNotNotifyAttribute] on Designer.VVM.ConfigurationViewModel.
Type:
Fody.WeavingException
StackTrace:
   at ModuleWeaver.InjectMethod(TypeDefinition targetType, InvokerTypes& invokerType)
   at ModuleWeaver.AddOnPropertyChangedMethod(TypeDefinition targetType)
   at ModuleWeaver.FindMethodsForNodes()
   at ModuleWeaver.Execute()
   at InnerWeaver.ExecuteWeavers() in C:\projects\fody\FodyIsolated\InnerWeaver.cs:line 182
Source:
PropertyChanged.Fody
TargetSite:
Mono.Cecil.MethodDefinition InjectMethod(Mono.Cecil.TypeDefinition, InvokerTypes ByRef)

Когда я перемещаю BaseViewModel в тот же проект, что и ConfigurationViewModel, тогда все в порядке.

Это стандартное поведение? Это ошибка? Я делаю что-то неправильно? Как использовать Fody.PropertyChanged с BaseViewModel в отдельном проекте?

1 Ответ

1 голос
/ 28 марта 2019

, когда базовая модель представления находится в том же проекте, метод OnPropertyChanged можно внедрить в этот класс. При ссылке на базовую модель представления из другого проекта этот проект должен иметь OnPropertyChanged, соответствующий соглашению, или настраивать имя метода с помощью EventInvokerNames https://github.com/Fody/PropertyChanged/wiki/EventInvokerSelectionInjection

в итоге, попробуйте добавить это к вашей модели базового вида

public virtual void OnPropertyChanged(string propertyName)
{
    var propertyChanged = PropertyChanged;
    if (propertyChanged != null)
    {
        propertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
...