他の人が答えているように、そのような横断的関心事はしばしばアスペクト指向プログラミング(AOP)で対処されます。
AOPを実行する1つの方法は、PostSharpなどのツールを使用したコードインストルメンテーションを使用することですが、追加のツールを必要としない代替手段は、依存性注入(DI)とデコレーターデザインパターンを利用することです。
あなたのコードがIFooインターフェースを消費すると想像してください:
public interface IFoo
{
string GetStuff(string request);
}
IFooの具体的な実装があるかもしれませんが、MyFoo
さまざまな側面を処理する1つまたは複数のデコレータを作成することもできます。
public class AdministratorGuardingFoo : IFoo
{
private readonly IFoo foo;
public AdministratorGuardingFoo(IFoo foo)
{
if (foo == null)
{
throw new ArgumentNullException("foo");
}
this.foo = foo;
}
public string GetStuff(string request)
{
new PrincipalPermission(null, "Administrator").Demand();
return this.foo.GetStuff(request);
}
}
これで、(DIコンテナを)ラップすることができMyFoo
ますAdministratorGuardingFoo
。消費するすべての消費者IFoo
は違いに気付かないでしょう。