1

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

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

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

我有一些限制:

  1. 我不想将 HttpContext 传输到 DLL,因为它会将其绑定到应用程序
  2. 我不想将资源文件从 to 重命名*.resx*.resource因为它们在应用程序中使用
  3. 我不想将所有标签传递给 DLL,因为那样我的模型将无法根据需要进行修改
  4. 我想在我的文档模型中放置一个像这样的标记<%resource(Global,myLabel)%>

我一直在考虑使用资源对象传递类,ResourceManager但它永远不会获取我的*.resx文件。

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

4

1 回答 1

1

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

  • 对于模型文件:

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

    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);
    

如果这对其他人有用并且有些人需要更多详细信息,请不要犹豫;)

于 2012-11-08T09:48:51.050 回答