Использование блока приложения для кэширования корпоративной библиотеки в Silverlight - PullRequest
1 голос
/ 20 октября 2011

Я загрузил шаблоны и практики Silverlight Integration Pack , чтобы использовать кэширование (блок приложения кэширования) в моем приложении Silverlight, но я пытался и не пытался заставить его работать. Я не нашел никакого полезного примера - у кого-нибудь есть пример? Всего несколько строк кода, которые показывают простое использование? Нужно ли использовать единство?

СПАСИБО! * * 1005

Я использовал конфигурацию по умолчанию, которую я получил от Enterprise Library Configuration - Tool, которую я экспортировал как XAML:

<el:CachingSettings DefaultCache="In-Memory Cache" x:Key="cachingSilverlightConfiguration">
  <el:CachingSettings.Caches>
    <el:InMemoryCacheData ExpirationPollingInterval="00:02:00" Name="In-Memory Cache" />
  </el:CachingSettings.Caches>
</el:CachingSettings>

И когда я пытаюсь получить к нему доступ с помощью следующего кода:

ObjectCache cache = EnterpriseLibraryContainer.Current.GetInstance<ObjectCache>("In-Memory Cache");

тогда я получаю исключение:

{System.IO.FileNotFoundException: The system cannot find the file specified. File name: 'System.Xml.Linq, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ...

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Благодаря Рэнди Леви из службы поддержки Entlib я получил нужный мне ответ, там :

Похоже, вы не настроили контейнер.Если вы не хотите вызывать сервер, чтобы получить конфигурацию, вам нужно встроить и загрузить конфигурацию.

string stringWithXAMLConfiguration = @"<?xml version=""1.0"" encoding=""utf-8""?>
<el:ConfigurationDictionary xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
                xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
                xmlns:el=""http://schemas.microsoft.com/practices/2011/entlib"">
<el:CachingSettings DefaultCache=""In-Memory Cache"" x:Key=""cachingSilverlightConfiguration"">
    <el:CachingSettings.Caches>
        <el:InMemoryCacheData ExpirationPollingInterval=""00:02:00"" Name=""In-Memory Cache"" />
        <el:IsolatedStorageCacheData MaxSizeInKilobytes=""5120"" PercentOfQuotaUsedBeforeScavenging=""50"" PercentOfQuotaUsedAfterScavenging=""20"" ExpirationPollingInterval=""00:01:00"" Name=""Isolated Storage Cache"" />
    </el:CachingSettings.Caches>
</el:CachingSettings>
</el:ConfigurationDictionary>";

var configDictionary = (IDictionary)XamlReader.Load(stringWithXAMLConfiguration);
var configSource = DictionaryConfigurationSource.FromDictionary(configDictionary);
EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);

Или, если вы не хотите иметь строку в коде, но предпочитаетев файле XAML убедитесь, что действие сборки файла XAML (например, cacheConfig.xaml) - это встроенный ресурс, и затем вы можете использовать следующий код:

string xaml;
using (Stream s = this.GetType().Assembly.GetManifestResourceStream("SilverlightApplicationCache.cacheConfig.xaml"))
    using (StreamReader sr = new StreamReader(s))
        xaml = sr.ReadToEnd();

var configDictionary = (IDictionary)XamlReader.Load(xaml);
var configSource = DictionaryConfigurationSource.FromDictionary(configDictionary);
EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);

SilverlightApplicationCache выше - это пространство имен файла XAMLнапример, пространство имен проекта по умолчанию).

0 голосов
/ 20 октября 2011

Вот пример: http://entlib.codeplex.com/releases/view/64923

Также смотрите это видео на канале 9: http://channel9.msdn.com/posts/Enterprise-Library-for-Silverlight-Data-Caching-demo

...