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