【问题标题】:Using Unity, how do I resolve a name value to a static class property?使用 Unity,如何将名称值解析为静态类属性?
【发布时间】:2011-10-13 22:45:54
【问题描述】:

我有一个项目,其中包含多个资源 (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>

这是设计器代码 - 这是由 codedom 生成的。

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;
            }
        }
    ...
}

【问题讨论】:

  • 旁注:在每次调用 GetStringValue 时创建和配置一个新容器将会非常昂贵。 Resolve 是线程安全的,因此您可以创建和配置一次容器。

标签: c# inversion-of-control unity-container unity2.0


【解决方案1】:

好的,我能够解决这个问题,但这只是因为我可以控制设计器文件 (CodeDom) 的生成。

总结:

  1. 我创建了一个接口,它有 1 个方法“GetString”
  2. 我调整了 CodeDom 逻辑 (similar to this) 来实现接口。
  3. 然后我能够通过 unity 解析接口实例

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多