据我所知,所有编译时.NET面向方面编程框架(如PostSharp或Fody)只能处理已成功编译的代码。使用编译时方面来实现抽象接口
这提出了一个障碍,如果你想使用这些框架的一个方面来实现的抽象接口的成员,因为被修改的类将不执行生成后工序后,直到接口。如果由于缺少界面导致编译阶段失败,则构建后步骤将无法运行。
例如,编写一个WPF MVVM应用程序,我有一个抽象接口用于我的视图模型。接口决定了视图模型必须执行的命令,例如:
using System.Windows.Input
public interface ITestVM
{
ICommand SomeCommand { get; }
}
我想创建一个具体的实现这个视图模型抽象接口,使用Commander.Fody实现ICommand的实例。下面是我的尝试:
using Commander;
public class TestVM : ITestVM
{
[OnCommandCanExecute("SomeCommand")]
private bool SomeCommandCanExecute()
{
return true;
}
[OnCommand("SomeCommand")]
private void SomeCommandExecute()
{
}
}
这将产生“‘ITestVM.SomeCommand’TestVM“不实现接口成员”
我相信Commander.Fody 将创建一个名为一个ICommand实例错误信息一些命令,但它从来没有机会这样做。
有什么办法可以使用编译时面向方面的框架来实现抽象接口吗?我读过“AOP.NET”这本书,编译时编织章节中没有讨论这种限制(pp183-190)。
你可以做的是有AOP框架注入整个界面而不只是执行。但是这可能会导致代码中的其他问题,因为您可能希望* TestVM执行ITestVM,并且编译器会抱怨*。 – nvoigt 2015-02-10 19:51:50
即使它没有实现(在编译时),也可以将一些对象转换为接口。所以你可以通过将TestVM投射到ITestVM来解决这个问题。 – 2015-02-13 07:54:12