Используя Unity, как мне разрешить имя в статическом свойстве класса? - PullRequest
1 голос
/ 14 октября 2011

У меня есть проект, который имеет несколько файлов Resource (resx) вместе с сопровождающими файлами .designer.cs. Каждый из этих классов имеет открытое статическое свойство типа System.Resources.ResourceManager .

То, что я не могу понять, это как правильно настроить конфигурацию для единства, чтобы я мог разрешить ее и выполнить. Очевидно, что приведенный ниже код не будет работать - поскольку он не позволит мне зарегистрировать объект таким образом.

public static string GetStringValue(name, tokenName)
{ 
   using (IUnityContainer container = new UnityContainer())
   {
        container.LoadConfiguration("ResourceManagers");
        var resolvedManager = container.Resolve<ResourceManager>(name);
        return resolvedManager.GetString(tokenName);
   }
}

И с учетом следующей конфигурации ...

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <assembly name="Web" />
    <container name="ResourceManagers">
      <register name="Manager1" mapTo="Web.Manager1Strings.ResourceManager" type="System.Resources.ResourceManager" />
    </container>
  </unity>

вот код конструктора - он генерируется кодетом.

public class Manager1Strings 
{
    ...
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        public static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Web.Resources.Manager1.Manager1Strings", typeof(Manager1Strings).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
    ...
}

1 Ответ

0 голосов
/ 14 октября 2011

Хорошо, я смог решить эту проблему, но только потому, что у меня был контроль над генерацией файлов конструктора (CodeDom).

В итоге:

  1. Я создалинтерфейс, который имел 1 метод "GetString"
  2. Я настроил логику CodeDom ( аналогично этому ) для реализации интерфейса.
  3. Затем я смог разрешить экземплярыинтерфейс через единство
...