2016-06-30 53 views
0

我在mvc5中有2個web應用程序,webapp1,webapp2。 通過Autofac,我註冊這個類:在asp.net mvc中使用Autofac共享單個實例mvc

//cache managers 
builder.RegisterType<MemoryCacheManager>().As<ICacheManager().Named<ICacheManager>("snt_cache_static").SingleInstance(); 
builder.RegisterType<SettingService>().As<ISettingService>().WithParameter(ResolvedParameter.ForNamed<ICacheManager>("snt_cache_static")).InstancePerLifetimeScope(); 

builder.RegisterType<TestController>() 
      .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("snt_cache_static")); 

當我修改並保存到數據庫webapp2的價值,我清除緩存,如果我用比較新的值存儲在緩存中,OK,對應,如一旦保存就從chache中刪除。

但是,如果我通過webapp1, 比較新值和存儲在緩存中,它仍然保存舊值。

WebApp1的緩存應該對應於webapp2的,因爲閱讀這兩個網站我使用參數「_settingService」或「_cacheManager」由Autofac在控制器通過緩存:

public TestController(
      ISettingService settingService, 
      ICacheManager cacheManager 
      ) 
     { 
      this._settingService = settingService; 
      this._cacheManager = cacheManager; 
     } 

我的問題是:我如何在兩個應用程序中共享緩存?

回答

0

正如在this StackExchange答案中所述,每個Web應用程序都有自己的應用程序域(.NET構造)。所以他們不能共享任何內存對象(technically they can,但並不那麼簡單) 在兩個應用程序之間共享數據的唯一方式是use cache in separate process(例如memcached),這不可避免地導致數據序列化。

如果您的應用程序之間共享的數據庫位於SQL Server上,也許可以使用build-in ASP.NET cache with SqlCacheDependency。這樣,每個應用程序都會有自己獨立的緩存,但每次其他應用程序更改數據庫中的某些內容時,此緩存都將失效...