Search code examples
.netxamllocalizationassembliesresourcemanager

Retrieve all ResourceManagers in an assembly


For localization purposes in Wpf I would like to loop through all ResourceManagers in an assembly.

The reason I want to do this is that I have a translate xaml markup extension. This markup extension needs to instantiate a ResourceManager using a fully qualified namespace and an assembly name.

The default assembly is the assembly in which the xaml file is located in which can be retrieved as follows:

var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
var root = rootObjectProvider.RootObject;
var assembly = ass = Assembly.GetAssembly(root.GetType());

When given a relative path the default path needs to be prepended, but this is a VS thing not an assembly thing. Most assemblies have the same name as the default namespace, but this is not always the case. Therefor I would like to loop through all ResourceManagers in an Assembly and try to match the last part of their namespace with the dictionary path given to the markup extension.


Solution

  • Okay I found out how to do it:

    var resources = assembly.GetManifestResourceNames();
    

    The operation seems quite costly though, next challenge: loading a ResourceManager in a ResourceDictionary..