使用来自通用DLL的应用程序* .resx

时间:2012-11-07 14:51:07

标签: c# resources

我正在创建一个通用DLL,它可以从模型创建文档,可以用于winForms或webForms。它由我用某些参数实例化的主类组成​​。 我希望我的DLL能够在资源文件中查找而不必被限制为1技术。

那么说,我知道如何在WebForm中访问我的资源文件(*.resx):

HttpContext.GetGlobalResourceObject("Global", "myLabel")

我有一些限制:

  1. 我不想将HttpContext传输到DLL,因为它会将它绑定到应用程序
  2. 我不想将资源文件从*.resx重命名为*.resource,因为它们已在应用程序中使用
  3. 我不想将所有标签传递给DLL,因为我的模型将无法修改,因为我需要
  4. 我想在我的文档模型中放置一个标记,就像这样<%resource(Global,myLabel)%>
  5. 我一直在寻找使用ResourceManager传递类的资源对象,但它永远不会抓住我的*.resx文件。

    有谁知道如何实现最终目标?将资源对象传递给类,从类中获取资源对象。

1 个答案:

答案 0 :(得分:1)

好的,我发现了如何做到这一点。 在我的DLL中,我重载了构造函数,允许给它一个ResourceManager对象。所以这就是我所拥有的:

  • 对于模型文件:

      \paragraph
      [
        Style = "Normal"
      ]
      {
        <%resource(lblMontant)%> : <%montant%>
      }
    
  • 对于使用ResourceManager

    的DLL
    public Reporter(String inputModel, String outputPdf, Dictionary<String, IParameter> parameters, ResourceManager resman)
    {
        // Assigne parameters to globals
        _sourceFile = inputModel;
        _destinationFile = outputPdf;
        _parameters = parameters;
        _rm = resman;
    
        Worker();
    }
    
    private String parseResource(String val)
    {
        MatchCollection _matches = _resourceMatcher.Matches(val);
        foreach (Match _match in _matches)
        {
            String _item = _match.Groups["item"].Value;
            val = val.Replace(_match.Groups[0].Value, String.Format("{0}", _rm.GetObject(_item)));                
        }
    
        return val;
    }
    
  • 对于来电者,我们使用被视为类的Resources.global

    ResourceManager _rm = new ResourceManager(typeof(Resources.global));
    
    Reporter _cl = new Reporter(modelFilePath, outputFilePath, _params, _rm);
    

如果这对其他人有用而某些人需要更多细节,请不要犹豫;)