コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 /// <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));
 }