所以我在我的 MVC 应用程序上安装了 Unity.WebApi。在名为“Areas”的文件夹中还有一个 web api 部分。
我正在通过 Web Api 上的策略注入和属性进行连接以实现缓存。
这是我的 Bootstrapper.cs 类:
public static void Initialise(IUnityContainer theContainer)
{
var container = BuildUnityContainer(theContainer);
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
}
private static IUnityContainer BuildUnityContainer(IUnityContainer theContainer)
{
theContainer.RegisterType<IPatientSearchController, PatientSearchController>(
new InterceptionBehavior<PolicyInjectionBehavior>(),
new Interceptor<InterfaceInterceptor>());
// register all your components with the container here
// e.g. container.RegisterType<ITestService, TestService>();
return theContainer;
}
在 global.asax 我有这个:
IUnityContainer container = Application.GetContainer();
container.AddNewExtension<Interception>();
ContainerBootstrapper.RegisterTypes(container);
Bootstrapper.Initialise(container);
我已经实现了缓存属性和缓存呼叫处理程序。而且我希望能够将我的 webapi 方法归于属性,以便它们具有缓存能力。
[caching]
public int GetNumber()
{
return 5;
}
我相信我在这里正确实施了大多数事情。但是当我从 URL 访问 api 方法时,我不断收到此错误
传递的类型必须是接口。System.ArgumentException
在 System.RuntimeTypeHandle.VerifyInterfaceIsImplemented(RuntimeTypeHandle 句柄,RuntimeTypeHandle interfaceHandle) 在 System.RuntimeType.GetInterfaceMap(Type ifaceType) 在 Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor.d__0.MoveNext() 在 Microsoft.Practices.Unity.InterceptionExtension.PolicyInjectionBehavior。 .ctor(CurrentInterceptionRequest interceptionRequest, InjectionPolicy[] 策略, IUnityContainer 容器) 在 lambda_method(Closure, IBuilderContext) 在 Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<> c_DisplayClass1.b_0(IBuilderContext context) 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) 在 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) 在 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) 在 Microsoft。 Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey, Action
1 childCustomizationBlock) at Microsoft.Practices.Unity.InterceptionExtension.InterceptionBehaviorsPolicy.<GetEffectiveBehaviors>d__4.MoveNext() at System.Linq.Buffer
1..ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable
1 source) at Microsoft.Practices.Unity.InterceptionExtension.InstanceInterceptionStrategy.PostBuildUp(IBuilderContext context) at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context ) 在 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型 t,现有对象,字符串名称,IEnumerable`1 resolverOverrides)