そのため、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);
私はすでに cachingAttribute と cachingCallHandler を実装しています。そして、webapi メソッドに属性を付けて、キャッシング機能を持たせたいと考えています。
[caching]
public int GetNumber()
{
return 5;
}
ここでは、ほとんどのものが正しく実装されていると思います。しかし、URLからAPIメソッドにアクセスすると、このエラーが発生し続けます
渡されるタイプはインターフェースでなければなりません。System.ArgumentException
System.RuntimeTypeHandle.VerifyInterfaceIsImplemented (RuntimeTypeHandle ハンドル、RuntimeTypeHandle interfaceHandle) で System.RuntimeType.GetInterfaceMap (タイプ ifaceType) で Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor.d__0.MoveNext() で Microsoft.Practices.Unity.InterceptionExtension.PolicyInjectionBehavior. Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c_DisplayClass1.b の lambda_method(Closure 、IBuilderContext ) での .ctor(CurrentInterceptionRequestinterceptionRequest、InjectionPolicy[] ポリシー、IUnityContainer コンテナー)Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext コンテキスト) の _0(IBuilderContext コンテキスト) Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext コンテキスト) の Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext コンテキスト)。 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) 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) で