1

所以我在我的 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.Buffer1..ctor(IEnumerable 1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable1 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)

4

0 回答 0