PostSharpでexternを使ったDaoパターン

PostSharpは、virtualなメソッドにアスペクトをかけられないようです。ですのでインタフェースのメソッドをアスペクトすることもできない。
サンプルをみていてわかったんですが、staticでexternにするとメソッドのbodyを持たなくてもいいので宣言だけ見るとインタフェースをアスペクトしているみたいになります。

[Dao]
public static class EmployeeDao
{
	public static extern Employee SelectBySalary(int max, int min);
}

この方法の欠点は、テストのときにポリモーフィズムでDaoを切り替えられないということです。普通に使うと使う側は以下のようになります。

public class EmployeeService
{
	public Employee SelectBySalary(int max, int min)
	{
		return EmployeeDao.SelectBySalary(max, min);
	}
}

対策としてはいったんFuncで受けてあげればよさげです。(テストのときはFuncを置き換える)。

public class EmployeeService
{
	protected Func<int, int, Employee> _selectBySalary = EmployeeDao.SelectBySalary;

	public Employee SelectBySalary(int max, int min)
	{
		return _selectBySalary(max, min);
	}
}