1

モデルからドキュメントを作成し、winFormsまたはwebFormsのいずれかに使用できる汎用DLLを作成しています。これは、特定のパラメーターを使用してインスタンス化するメインクラスで構成されています。DLLが、1つのテクノロジに縛られることなくリソースファイルを検索できるようにしたいと思います。

つまり、Webフォームでリソースファイル(*.resx)にアクセスする方法を知っています。

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

私にはいくつかの制限があります:

  1. HttpContextをDLLに転送したくないのは、それがアプリケーションに結び付けられるからです。
  2. リソースファイルはアプリケーションで使用されているため、から*.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 に答える