private ResourceManager GetResourceManager(string source)
{
Func<ResourceManager> retrievalFunc = () =>
{
try
{
#if NETFX_CORE
var resourceContainer = GetResourceContainer(source);
var resourceLoader = ResourceManager.GetForViewIndependentUse(resourceContainer);
#else
var splittedString = source.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
var assemblyName = splittedString[1].Trim();
var containingAssemblyName = string.Format("{0},", assemblyName);
var loadedAssemblies = AssemblyHelper.GetLoadedAssemblies();
// Invert so design-time will always pick the latest version
loadedAssemblies.Reverse();
var assembly = loadedAssemblies.FirstOrDefault(x => x.FullName.StartsWith(containingAssemblyName));
if (assembly == null)
{
return null;
}
string resourceFile = splittedString[0];
var resourceLoader = new ResourceManager(resourceFile, assembly);
#endif
return resourceLoader;
}
catch (Exception ex)
{
Log.Warning(ex, "Failed to get the resource manager for source '{0}'", source);
return null;
}
};
if (CacheResults)
{
return _resourceFileCache.GetFromCacheOrFetch(source, retrievalFunc);
}
return retrievalFunc();
}