c# .net caching unity-container enterprise-library

c# - Se produjo un error de activación al intentar obtener una instancia de tipo ICacheManager, clave "Cache Manager"



.net caching (1)

El bloque de aplicación de almacenamiento en caché requiere que haya cierta información de configuración en la aplicación / web.config antes de que pueda usarse (AFAIK, desafortunadamente es difícil encontrar documentación que indique lo contrario). Sin esa información de configuración, el siguiente código hará que se lanza la misma excepción mientras está viendo:

var cm = CacheFactory.GetCacheManager("MyCacheManager");

Para obtener un CacheManager , debe definir CacheManager en su app.config o web.config:

<configuration> <configSections> <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> </configSections> <cachingConfiguration defaultCacheManager="MyCacheManager"> <cacheManagers> <add name="MyCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="50000" numberToRemoveWhenScavenging="1000" backingStoreName="NullBackingStore" /> </cacheManagers> <backingStores> <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" /> </backingStores> </cachingConfiguration> </configuration>

Una vez que agregue los valores de configuración, podrá obtener un CacheManager válido de CacheFactory . La publicación también contiene más información que podría ayudarte.

Vale la pena señalar que si está usando .NET 4.0, para las aplicaciones que no son web puede usar MemoryCache (en el System.Runtime.Caching nombres System.Runtime.Caching ) que proporciona una funcionalidad similar pero no requiere toda esta configuración. Y para las aplicaciones web, por supuesto, puedes usar la clase Cache en System.Web.Caching .

Parece que toqué una pared aquí y agradecería la ayuda de cualquiera que sea capaz de hacerlo en esta. No estoy exactamente seguro de lo que significa el siguiente mensaje de error. Estoy usando el bloque de almacenamiento en caché de Enterprise Pattern Services, pero sigo corriendo hacia el siguiente problema. Descargué la versión más reciente e intenté acceder al tema, pero parece que no puedo identificar el problema exacto y necesito ayuda, por favor. Gracias por adelantado

Test method WorldBank.Service.Business.UnitTest.TopicsManagerTest.Call_Children_out_of_schoolTest threw exception: Microsoft.Practices.ServiceLocation.ActivationException: Activation error occured while trying to get instance of type ICacheManager, key "Cache Manager" ---> Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager", name = "Cache Manager". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager, is an interface and cannot be constructed. Are you missing a type mapping? ----------------------------------------------- At the time of the exception, the container was: Resolving Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager,WuCache ---> System.InvalidOperationException: The current type, Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager, is an interface and cannot be constructed. Are you missing a type mapping? Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/ObjectBuilder/Strategies/BuildPlan/DynamicMethod/Creation/DynamicMethodConstructorStrategy.cs: line 209 BuildUp_Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager(IBuilderContext ) Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/ObjectBuilder/Strategies/BuildPlan/DynamicMethod/DynamicMethodBuildPlan.cs: line 37 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/ObjectBuilder/Strategies/BuildPlan/BuildPlanStrategy.cs: line 43 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/ObjectBuilder/Strategies/StrategyChain.cs: line 110 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/UnityContainer.cs: line 511 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/UnityContainer.cs: line 515 Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/UnityContainer.cs: line 173 Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type serviceType, String key) in e:/Builds/Unity/UnityTemp/Compile/Unity/Unity/Src/UnityServiceLocator.cs: line 64 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:/Home/Chris/Projects/CommonServiceLocator/main/Microsoft.Practices.ServiceLocation/ServiceLocatorImplBase.cs: line 49 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:/Home/Chris/Projects/CommonServiceLocator/main/Microsoft.Practices.ServiceLocation/ServiceLocatorImplBase.cs: line 53 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService](String key) in c:/Home/Chris/Projects/CommonServiceLocator/main/Microsoft.Practices.ServiceLocation/ServiceLocatorImplBase.cs: line 103 Microsoft.Practices.EnterpriseLibrary.Caching.CacheFactory.InnerGetCacheManager(String cacheManagerName) in e:/Builds/EntLib/Latest/Source/Blocks/Caching/Src/Caching/CacheFactory.cs: line 66 Microsoft.Practices.EnterpriseLibrary.Caching.CacheFactory.GetCacheManager(String cacheManagerName) in e:/Builds/EntLib/Latest/Source/Blocks/Caching/Src/Caching/CacheFactory.cs: line 53 WorldBank.Service.Business.ResponseManager.Get_w_Utility() in C:/SOOfficialPiece/WorldBank.Service.Business/ResponseManager.cs: line 42 WorldBank.Service.Business.ResponseManager..ctor() in C:/SOOfficialPiece/WorldBank.Service.Business/ResponseManager.cs: line 34 WorldBank.Service.Business.ResponseManager.getResponseObjectJSON(Int32 perpage, Object results, Boolean doDeepRetrieval) in C:/SOOfficialPiece/WorldBank.Service.Business/ResponseManager.cs: line 68 System.Dynamic.UpdateDelegates.UpdateAndExecute4[T0,T1,T2,T3,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3) WorldBankBusiness.Topics.TopicsManager.Call_Children_out_of_school(PersonType persontype, EnrollmentType enrollmenttype, String countrycode) in C:/SOOfficialPiece/WorldBank.Service.Business/TopicsManager.cs: line 39 WorldBank.Service.Business.UnitTest.TopicsManagerTest.Call_Children_out_of_schoolTest() in C:/SOOfficialPiece/WorldBank.Service.Business.UnitTest/TopicsManagerTest.cs: line 88