我目前正在尝试使用接口拦截的约定注册。不幸的是,我似乎做错了什么,因为我StackOverflowException
在Unity.Container.dll
第一个解决方案中运行...
这是我尝试过的:
container = new UnityContainer();
container.RegisterTypes(AllClasses.FromAssemblies(Assembly.GetAssembly(typeof(IFoo)),
WithMappings.FromMatchingInterface,
getInjectionMembers: c => new InjectionMember[] { new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<IBarBehavior>()});
似乎现在所有类都已注册,而不仅仅是具有匹配接口的类(Foo --> IFoo
)。没有接口拦截,语句没问题,我的类也按预期注册了。
任何想法或帮助都会很棒!
更新:
我在另一个问题中发现了这篇文章,该问题说明了何时使用 a LifeTimeManager
orinterception
行为时,所有类型都已注册。通过使用这些信息,以下代码产生了预期的结果:
container.RegisterTypes(AllClasses.FromAssemblies(Assembly.GetAssembly(typeof(IFoo)).
Where(t => t.GetTypeInfo().GetInterface("I" + t.Name) != null),
WithMappings.FromMatchingInterface,
getInjectionMembers: c => new InjectionMember[] { new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<IBarBehavior>()});