I found an answer to this question on SO. The code below shows my final refactoring to use ConfigurationManager to find the path to the configuration file; which includes the "AppUrlThingy". I hope someone will find this useful.
using System.Configuration;
using System.IO;
namespace XWire.DataServices
{
public interface ILocalDataLocator
{
string DataLocation { get; set; }
}
public class LocalDataLocator : ILocalDataLocator
{
private string AppConfigurationFile
{
get
{
var level = ConfigurationUserLevel.PerUserRoamingAndLocal;
var configuration = ConfigurationManager.OpenExeConfiguration(level);
return configuration.FilePath;
}
}
public string DataLocation { get; set; }
private readonly IFileDataService _fileDataService;
public LocalDataLocator(IFileDataService fileDataService)
{
_fileDataService = fileDataService;
InitializeStorageFileLocation();
}
private void InitializeStorageFileLocation()
{
var appConfigurationFile = AppConfigurationFile;
var appConfigurationFolder = RemoveUserConfigFileName(appConfigurationFile);
DataLocation = CheckDir(appConfigurationFolder);
}
private string RemoveUserConfigFileName(string appConfigurationFile)
{
return Path.GetDirectoryName(appConfigurationFile);
}
// Create folder if it is not already there
private string CheckDir(string appConfigurationFolder)
{
if (_fileDataService.DirectoryExists(appConfigurationFolder) == false)
{
_fileDataService.CreateDirectory(appConfigurationFolder);
}
return appConfigurationFolder;
}
}
}