我写了一段简单的代码来参与Afterthought,但是它不起作用,我也不知道为什么。它的很大一部分来自其他SO问题:How to implement simple Property Ammendment with 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();
}
}
}
它可以编译,但不对输出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
最佳答案
我知道是一年后,但是:
为了建立在Willem van Ketwich的答案的基础上,Afterthought.NET中实际上存在一个错误(疏忽大意?),如果不修改其父类型,则不允许修改嵌套的类型。
我已经提交了pull request修复错误。
除了此修复程序之外,您仍需要在嵌套类上使用[Amendment(typeof(TestUserAmmendment<>))]
来触发修订。
关于c# - 经过思考似乎不起作用,简单的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10606700/