private LocalizationContextFactoryBase FindContextFactoryFromAssembly(Assembly assembly) { LocalizationContextFactoryBase result = null; var attributes = assembly.GetCustomAttributes <LocalizationContextFactoryAttribute>().ToList(); if (attributes.Count > 0) { if (attributes.Count > 1) { throw new InvalidOperationException( $"Assembly '{assembly.FullName}' contains multiple [{nameof(LocalizationContextFactoryAttribute)}(...)] definitions. " + "Only one attribute can be specified for assembly!"); } var contextFactoryAttribute = attributes.First(); if (!string.IsNullOrEmpty(contextFactoryAttribute.TypeName)) { var factoryType = Type.GetType(contextFactoryAttribute.TypeName, false); if (factoryType == null) { throw new InvalidOperationException( $"Could not found type '{contextFactoryAttribute.TypeName}' specified in '{typeof(LocalizationContextFactoryAttribute).FullName}' " + $"in assembly '{assembly.FullName}'!"); } try { var localizationContextFactory = Activator.CreateInstance(factoryType) as LocalizationContextFactoryBase; _contextFactoryProvider = localizationContextFactory ?? throw new InvalidOperationException( $"Type '{factoryType.FullName}' does not implement abstract class '{TypeLocalizationContextFactory.FullName}' !"); result = localizationContextFactory; } catch (Exception e) { throw new InvalidOperationException( $"Error creating instance of type '{factoryType.FullName}' !", e); } } } return(result); }
private IFormattable FindContextFromAssemblyFactory(object targetObject) { IFormattable result = null; LocalizationContextFactoryBase localizationContextFactory = _contextFactoryProvider; if (localizationContextFactory == null) { Type factoryType = _contextFactoryType; if (factoryType == null && targetObject != null) { localizationContextFactory = FindContextFactoryFromAssembly(targetObject.GetType().Assembly); } if (factoryType != null && localizationContextFactory == null) { try { localizationContextFactory = Activator.CreateInstance(factoryType) as LocalizationContextFactoryBase; _contextFactoryProvider = localizationContextFactory ?? throw new InvalidOperationException( $"Type '{factoryType.FullName}' does not implement abstract class '{TypeLocalizationContextFactory.FullName}' !"); } catch (Exception e) { throw new InvalidOperationException( $"Error creating instance of type '{factoryType.FullName}' !", e); } } } if (localizationContextFactory != null) { result = localizationContextFactory.GetSingleton(); } return(result); }
/// <summary> /// Initializes localization extension with specified context factory provider. /// </summary> /// <param name="contextFactoryProvider">The context factory provider.</param> public static void Initialize(LocalizationContextFactoryBase contextFactoryProvider) { _contextFactoryProvider = contextFactoryProvider ?? throw new ArgumentNullException(nameof(contextFactoryProvider)); }