使用Unity,我如何将名称值解析为静态类属性
本文关键字:属性 静态类 Unity 使用 | 更新日期: 2023-09-27 18:11:08
我有一个项目,其中有多个资源(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;
}
}
...
}
好吧,我能够解决这个问题,但这只是因为我控制了设计器文件(CodeDom)的生成。
在简介:- 我创建了一个接口,它有一个方法"GetString"
- 我调整了CodeDom逻辑(类似于此)来实现接口。
- 然后我能够通过unity解析接口实例