简而言之,查看加载的程序集(如果需要,添加额外的过滤 - 如果在引导程序上完成,则不进行缓存)为实现指定标记接口的类型添加默认拦截器。
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());
}
}
编辑:
以上可以使用 fluent API 完成,这意味着我们没有对 AppDomain.CurrentDomain.GetAssemblies() 的天真依赖(它不包含在 fluent api 配置中应用的过滤
.Include(If.Implements<IBusinessService>, (x, y) =>
{
if (x.IsClass)
y.Configure<Interception>().
SetDefaultInterceptorFor(x,
new VirtualMethodInterceptor
());
})