简单场景
public interface IFoo
{
int GetData();
}
public class Foo : IFoo
{
[CacheResult]
public int GetData() { .... }
}
public class MyController
{
[Dependency]
IFoo Foo {get; set;}
}
如果我手动注册接口,解析 MyController 工作正常:
container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager(),
new InterceptionBehavior<PolicyInjectionBehavior>(),
new Interceptor<InterfaceInterceptor>());
var controller = container.Resolve<MyController>();
如果我尝试使用自动注册:
container.RegisterTypes(
AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default,
WithLifetime.ContainerControlled,
getInjectionMembers: t => new InjectionMember[]
{
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<PolicyInjectionBehavior>(),
});
var controller = container.Resolve<MyController>();
解析失败并出现 ResolutionFailedException,因为传递的类型必须是接口。当然,如果我把它做成一个接口,它就可以工作,但前提是它被命名为Controller。如果我将其称为 MyController 或 SqlController 或其他名称,则映射将失败,因为它无法解析接口。
我希望只做一个程序集扫描,类似于 Spring 框架所做的,但我无法弄清楚。
我错过了什么?或者这在 Unity 中是不可能的?