Problem, um Objekt mit überladenem Konstruktor in IronRuby zu instanziieren?

StackOverflow https://stackoverflow.com/questions/6310599

  •  26-10-2019
  •  | 
  •  

Frage

Ich habe das "Dokument" von AC# -Klass "Dokument" mit überladenen Konstruktoren (int -ID), (Guid -ID) und einigen weiteren Parameteroptionen - und ohne Überladung mit 0 Parametern. Wenn ich versuche, ein neues Objekt mit IronRuby zu erstellen, stolpere ich. Es heißt, es möchte 0 Argumente haben, also:

d = Document.new

funktioniert gut. Aber wenn ich es versuche

d = Document.new some_integer

Ich erhalte die Fehlermeldung

"wrong number of arguments (1 for 0)"

Die Klasse Def sieht so aus:

public Document(int id) : base(id)
{
  // some code
}

Bearbeiten: Hier ist der komplette Code. Es befindet sich in einem Umbraco -Kontext, und ich übersetze Namespaces mit niedrigerem Fall, um sie in IronRuby verwenden zu können:

$LOAD_PATH << "C:\\inetpub-dev\\dev.mysite.com\\bin"
require "cms.dll"
require "businesslogic.dll"

Web = Object.const_get("umbraco").const_get("cms").const_get("businesslogic").const_get("web")
existing_document_id = 1065
existing_document = Web::Document.new(existing_document_id)

Gleicher Code in C#:

var existingDocument = new umbraco.cms.businesslogic.web.Document(1065);
War es hilfreich?

Lösung

Ich frage mich, ob Sie irgendwo auf eine Namespace -Kollision treffen.
Gibt es eine Möglichkeit, dass ein Dokument woanders in dem definiert ist, was Sie einschließen?

Wir können nicht sehen, wie Ihre Basisklasse aussieht
Außerdem können wir nicht sehen, was Sie benötigen/beinhalten, die Sie verwenden

Ich habe ein Beispiel eingerichtet, und es scheint wie erwartet zu funktionieren:

namespace IRConstructorParamSpike
{
    public abstract class BaseDocument
    {
        public BaseDocument(int id) { }
    }

    public class Document : BaseDocument
    {
        public Document(int id) : base(id) { }
    }

    public class SomeDocument : BaseDocument
    {
        public SomeDocument(int id) : base(id) { }
    }
}

So sah die Sitzung aus (mit IronRuby 1.1.4.0):

erfordern 'irconstructorParamspike.dll' => true

d = document.new (ir): 1: in "const_missing": nicht initialisiertes konstantes Objekt :: document (nameError) aus (ir): 1 <- weil ich den Namespace nicht aufgenommen habe

d = irconstructorParamspike :: document.new (ir): 1: Falsche Anzahl von Argumenten (0 für 1) (ArgumentError) <- Was wir ohne parameterlosen Konstruktor erwarten würden

d = irconstructorParamspike :: document.new 10 => irconstructorParamspike.document

Könnten Sie es mit diesem einfacheren Beispielcode versuchen und sehen, ob Sie die Objekte so erstellen können, wie Sie es erwarten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top