2

Afterthoughtに参加するための簡単なコードを作成しましたが、機能せず、理由がわかりません。その大部分は、他のSOの質問から取られています:後付けで単純なプロパティ修正を実装する方法

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();
        }
    }
}

コンパイルされますが、出力exeファイルは変更されません。ビルド後のイベントを設定しました。ビルド出力:

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の最後のソースを使用しています。なぜそれが機能しないのか、いくつかのアイデアがありますか?

編集:これが全体の解決策です:SecondAmendmentTest.zip

4

2 に答える 2

1

私はそれが1年後であることを知っていますが:

Willem van Ketwich の回答に基づいて構築するために、実際には、親の型が修正されていない場合にネストされた型を修正できないというバグ (見落とし?) が Afterthought.NET にありました。

バグを修正するプル リクエストを送信しました。

この修正に加えて[Amendment(typeof(TestUserAmmendment<>))]、ネストされたクラスで修正をトリガーする必要があります。

于 2013-08-10T00:34:31.837 に答える
0

私は2つのことをすることでこれを機能させました:

  • TestUser クラスと TestUserAmmendment クラスを Program クラスの外に移動して、ネストされないようにします。

  • [Amendment(typeof(TestUserAmmendment<>))]属性を TestUser クラスに追加します。

実用的なソリューションはここにあります。

于 2012-11-17T04:32:43.073 に答える