public static DistributedApplicationData AddFilePersistence( this DistributedApplicationData applicationData , IServiceProvider provider , ISettingsMetadata metadata , SettingsScopes settingsScope = SettingsScopes.Both , string localRootPath = ".\\Local" , string roamingRootPath = ".\\Roaming") { FilePersistenceManager.Build(provider); if (settingsScope == SettingsScopes.Both || settingsScope == SettingsScopes.Local) { FilePersistenceManager.Current.AddApplicationData( applicationData.LocalSettings, settingsScope); } if (settingsScope == SettingsScopes.Both || settingsScope == SettingsScopes.Roaming) { FilePersistenceManager.Current.AddApplicationData( applicationData.RoamingSettings, settingsScope); } applicationData.DataChanged += ApplicationDataOnDataChanged; return(applicationData); }
public FilePersistenceManager(IServiceProvider provider , IConfiguration configuration , ISettingsMetadata metadata , IFilePersistenceProvider persistenceProvider) { _current = this; Configuration = configuration; Metadata = metadata; PersistenceProvider = persistenceProvider; LocalPath ??= configuration[SETTINGS_SYNC_DEFAULT_PATH_LOCAL] ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), metadata.AppName); if (!File.Exists(Path.Combine(LocalPath, Metadata.AppName + $".{PersistenceProvider.FileExtension}"))) { var fileWriter = PersistenceProvider.FileType switch { FileTypes.Binary => (IFilePersistenceProvider)provider.GetService <BinaryPersistenceProvider>(), FileTypes.XML => (IFilePersistenceProvider)provider.GetService <XmlPersistenceProvider>(), FileTypes.Other => (IFilePersistenceProvider)provider.GetService( Assembly .Load(configuration[SETTINGS_SYNC_SETTINGS_FILE_OTHER_PROVIDER_ASSEMBLY]) .GetType(configuration[SETTINGS_SYNC_SETTINGS_FILE_OTHER_PROVIDER])), _ => (IFilePersistenceProvider)provider.GetService <JsonPersistenceProvider>() }; var blankFile = new DistributedPropertySet(); blankFile.SetValues(Metadata.BlankFile[SettingsScopes.Local]); fileWriter.WriteFile(Metadata.AppName, LocalPath, SettingsScopes.Local, blankFile); } var localData = PersistenceProvider.OpenFile(Metadata.AppName, LocalPath, SettingsScopes.Local); AddApplicationData(localData, SettingsScopes.Local); RoamingPath ??= configuration[SETTINGS_SYNC_DEFAULT_PATH_ROAMING] ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "One Drive", metadata.AppName); if (!File.Exists(Path.Combine(RoamingPath, Metadata.AppName + $".{PersistenceProvider.FileExtension}"))) { var fileWriter = PersistenceProvider.FileType switch { FileTypes.Binary => (IFilePersistenceProvider)provider.GetService <BinaryPersistenceProvider>(), FileTypes.XML => (IFilePersistenceProvider)provider.GetService <XmlPersistenceProvider>(), FileTypes.Other => (IFilePersistenceProvider)provider.GetService( Assembly .Load(configuration[SETTINGS_SYNC_SETTINGS_FILE_OTHER_PROVIDER_ASSEMBLY]) .GetType(configuration[SETTINGS_SYNC_SETTINGS_FILE_OTHER_PROVIDER])), _ => (IFilePersistenceProvider)provider.GetService <JsonPersistenceProvider>() }; var blankFile = new DistributedPropertySet(); blankFile.SetValues(Metadata.BlankFile[SettingsScopes.Roaming]); fileWriter.WriteFile(Metadata.AppName, RoamingPath, SettingsScopes.Roaming, blankFile); } var roamingData = PersistenceProvider.OpenFile(Metadata.AppName, RoamingPath, SettingsScopes.Roaming); AddApplicationData(localData, SettingsScopes.Roaming); }
public static FilePersistenceManager Build(IServiceProvider serviceProvider) { return(_current = serviceProvider.GetService <FilePersistenceManager>()); }