要するに、ロードされたアセンブリを見てください (必要に応じて追加のフィルタリングを追加します - これがブートストラップで行われる場合はキャッシュしません) 指定されたマーカー インターフェイスを実装する型の既定のインターセプターを追加します。
container.AddNewExtensionIfNotPresent<Interception>();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
Type[] types = assembly.GetTypes().Where(x => x.IsClass && typeof(T).IsAssignableFrom(x) && x.GetType() != typeof(T)).ToArray();
foreach (Type t in types)
{
container.Configure<Interception>().SetDefaultInterceptorFor(t, new VirtualMethodInterceptor());
}
}
編集:
上記は流暢な API を使用して実行でき、AppDomain.CurrentDomain.GetAssemblies() への素朴な依存関係がないことを意味します (流暢な API 構成で適用されるフィルタリングは含まれません)。
.Include(If.Implements<IBusinessService>, (x, y) =>
{
if (x.IsClass)
y.Configure<Interception>().
SetDefaultInterceptorFor(x,
new VirtualMethodInterceptor
());
})