Задумка кажется не работает, простой код

Я написал простой кусок кода для участия в Afterthought, но он не работает, и я понятия не имею, почему. Огромная часть этого взята из другого SO вопроса: Как реализовать простое изменение свойств с помощью Afterthought.

using System;
using System.Collections.Generic;
using Afterthought;
namespace SecondAmendmentTest
{
    class Program
    {
        public class TestUser
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public bool HasChanged { get; set; }
            public void method()
            {
                Console.WriteLine("method");
            }
        }

        public class TestUserAmmendment<T> : Amendment<T, T> where T : TestUser
        {
            public TestUserAmmendment()
            {
                Properties
                    .AfterSet((instance, x, y, z, a) => instance.HasChanged = true);
                Methods.After(ExceptionMethod);
            }

            private object ExceptionMethod(T instance, string method, object[] parameters, object result)
            {
                throw new NotImplementedException();
            }
        }

        static void Main(string[] args)
        {
            TestUser tu = new TestUser();
            Console.WriteLine("Has changed: " + tu.HasChanged.ToString());
            Console.WriteLine("Performing changes...");
            tu.Id = 5;
            tu.FirstName = "name";
            tu.LastName = "lastname";
            Console.WriteLine("Has changed: " + tu.HasChanged.ToString());
            tu.method();
            Console.ReadKey();
        }
    }
}

Он компилируется, но в выходной исполняемый файл не вносятся никакие изменения. Я настроил событие пост-сборки. Построить вывод:

1>------ Rebuild All started: Project: SecondAmendmentTest, Configuration: Debug Any CPU ------
1>  SecondAmendmentTest -> C:\Users\Lukasz\Documents\Visual Studio 11\Projects\SecondAmendmentTest\SecondAmendmentTest\bin\Debug\SecondAmendmentTest.exe
1>  Amending SecondAmendmentTest.exe (5,559 seconds)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

И, наконец, вывод из приложения после запуска:

C:\Users\Lukasz\Documents\Visual Studio 11\Projects\SecondAmendmentTest\SecondAmendmentTest\bin\Debug>SecondAmendmentTest.exe
Has changed: False
Performing changes...
Has changed: False
method

Не было изменено ни свойство HasChanged, ни исключение NotImplementedException. Я использую последние источники из Git. У вас есть идеи, почему это не работает?

РЕДАКТИРОВАТЬ: Вот полное решение: http://dl.dropbox.com/u/1014611/SecondAmendmentTest.zip

2 ответа

Я знаю, что это год спустя, но:

Чтобы развить ответ Виллема ван Кетвича, на самом деле в Afterthought.NET была ошибка (недосмотр?), Которая не позволяла изменять вложенные типы, если их родительский тип не изменялся.

Я отправил запрос на удаление, исправляющий ошибку.

В дополнение к этому исправлению вам все еще нужно [Amendment(typeof(TestUserAmmendment<>))] в вашем вложенном классе, чтобы вызвать поправку.

Я получил это на работу, сделав две вещи:

  • Переместите классы TestUser и TestUserAmmendment из класса Program, чтобы они не были вложенными.

  • Добавьте атрибут [Amendment(typeof(TestUserAmmendment<>))] в класс TestUser.

Рабочее решение можно найти здесь.

Другие вопросы по тегам