Ändern des Klassenattributs in Runtime

8

Ich bin mir nicht sicher, ob es möglich ist, dass ich gesehen habe:
Parameter des Attributs ändern um Laufzeit.
Mein Fall ist sehr ähnlich, aber ich versuche, das Attribut einer Klasse in Runtime zu ändern:

%Vor%

Eine der Antworten war:

%Vor%

Dank Marc Gravell in ein besser lesbares Format geändert:

%Vor%

Alles ist gut, wenn Sie TypeDescriptor verwenden, aber wenn Sie:

verwenden %Vor%

Name hat den Text "Ich ändere mich".
Gibt es eine Möglichkeit, dieses Attribut zur Laufzeit zu ändern?

Bearbeiten:
Ich brauche dies für Linq2Sql im Designer der generierte Code hat das DB-Schema. Ich möchte das Standardschema des Benutzers verwenden, ohne XML-Mapping zu verwenden, oder den generierten Code ändern (die Tabelle befindet sich noch in der Entwicklungsphase und ändert sich häufig).

Der Designer-Code lautet:

%Vor%

Ich möchte, dass das Attribut lautet:

%Vor%

Jetzt habe ich in den Framework-Code gegraben und ich denke, linq2sql verwendet:

%Vor%

Wenn ich TypeDescriptor zum Ändern des Attributs verwende, wird der Wert in GetCustomAttributes nicht geändert.

    
Roy Dallal 27.01.2011, 12:48
quelle

3 Antworten

2

Vermeiden Sie die Reflexion vollständig , und zwar über TypeDescriptor :

%Vor%     
Marc Gravell 27.01.2011 13:19
quelle
0
___ qstnhdr ___ Ändern des Klassenattributs in Runtime ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ antwort4816636 ___

Wenn Sie reflection verwenden, dann können diese reflection Attribute nicht ersetzt werden - nur die component-model -Ansicht ist betroffen von TypeDescriptor . Sie können jedoch CategoryAttribute für Ihre Zwecke ableiten. Besonders nützlich für i18n.

%Vor%     
___ tag123reflection ___ Reflection ist die Fähigkeit eines Programms, seine Struktur und / oder sein Verhalten zur Laufzeit zu beobachten und / oder zu ändern. ___ antwort4816638 ___

Sie müssen Ihr Attribut so codieren, dass es Laufzeitwerte unterstützt. Beispielsweise unterstützen die Validierungsattribute die Internationalisierung von Nachrichten durch die Einstellung eines Ressourcentyps und einer Ressourcenzeichenfolge im Gegensatz zur statischen Nachrichtenzeichenfolge.

Ein anderer Ansatz besteht darin, einen IOC-Container wie StructureMap oder Unity zu verwenden, um ein Objekt / einen Dienst bereitzustellen, der die Werte bereitstellt.

Wenn Sie Ihr Attribut nicht an einen bestimmten Container koppeln möchten, verwenden Sie den Common ServiceLocator-Wrapper, der von der Gruppe Patterns and Practices bereitgestellt wird.

    
___ qstntxt ___

Ich bin mir nicht sicher, ob es möglich ist, dass ich gesehen habe:
Parameter des Attributs ändern um Laufzeit.
Mein Fall ist sehr ähnlich, aber ich versuche, das Attribut einer Klasse in Runtime zu ändern:

%Vor%

Eine der Antworten war:

%Vor%

Dank Marc Gravell in ein besser lesbares Format geändert:

%Vor%

Alles ist gut, wenn Sie TypeDescriptor verwenden, aber wenn Sie:

verwenden %Vor%

Name hat den Text "Ich ändere mich".
Gibt es eine Möglichkeit, dieses Attribut zur Laufzeit zu ändern?

Bearbeiten:
Ich brauche dies für Linq2Sql im Designer der generierte Code hat das DB-Schema. Ich möchte das Standardschema des Benutzers verwenden, ohne XML-Mapping zu verwenden, oder den generierten Code ändern (die Tabelle befindet sich noch in der Entwicklungsphase und ändert sich häufig).

Der Designer-Code lautet:

%Vor%

Ich möchte, dass das Attribut lautet:

%Vor%

Jetzt habe ich in den Framework-Code gegraben und ich denke, linq2sql verwendet:

%Vor%

Wenn ich TypeDescriptor zum Ändern des Attributs verwende, wird der Wert in GetCustomAttributes nicht geändert.

    
___ tag123linqtosql ___ LINQ to SQL ist eine Komponente von .NET Framework Version 3.5, die eine Laufzeitinfrastruktur für die Verwaltung relationaler Daten als Objekte in Microsoft SQL Server bereitstellt. ___ tag123attributes ___ Das Attribut-Tag sollte für alle Probleme verwendet werden, die sich auf eine Eigenschaft eines Objekts, Elements oder einer Datei usw. beziehen. ___ answer4816805 ___

Vermeiden Sie die Reflexion vollständig , und zwar über %code% :

%Vor%     
___ tag123net35 ___ Die Version 3.5 von .NET Framework, die auf dem 2.0 .NET Framework mit zusätzlichen Assemblys (einschließlich 3.0) basiert. Verwenden Sie für Fragen, die sich speziell auf .NET Framework 3.0 beziehen. Bei Fragen zu .NET Framework verwenden Sie im Allgemeinen das .net-Tag. ___
Marc Gravell 27.01.2011 13:03
quelle
0
___ qstnhdr ___ Ändern des Klassenattributs in Runtime ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ antwort4816636 ___

Wenn Sie reflection verwenden, dann können diese reflection Attribute nicht ersetzt werden - nur die component-model -Ansicht ist betroffen von %code% . Sie können jedoch %code% für Ihre Zwecke ableiten. Besonders nützlich für i18n.

%Vor%     
___ tag123reflection ___ Reflection ist die Fähigkeit eines Programms, seine Struktur und / oder sein Verhalten zur Laufzeit zu beobachten und / oder zu ändern. ___ antwort4816638 ___

Sie müssen Ihr Attribut so codieren, dass es Laufzeitwerte unterstützt. Beispielsweise unterstützen die Validierungsattribute die Internationalisierung von Nachrichten durch die Einstellung eines Ressourcentyps und einer Ressourcenzeichenfolge im Gegensatz zur statischen Nachrichtenzeichenfolge.

Ein anderer Ansatz besteht darin, einen IOC-Container wie StructureMap oder Unity zu verwenden, um ein Objekt / einen Dienst bereitzustellen, der die Werte bereitstellt.

Wenn Sie Ihr Attribut nicht an einen bestimmten Container koppeln möchten, verwenden Sie den Common ServiceLocator-Wrapper, der von der Gruppe Patterns and Practices bereitgestellt wird.

    
___ qstntxt ___

Ich bin mir nicht sicher, ob es möglich ist, dass ich gesehen habe:
Parameter des Attributs ändern um Laufzeit.
Mein Fall ist sehr ähnlich, aber ich versuche, das Attribut einer Klasse in Runtime zu ändern:

%Vor%

Eine der Antworten war:

%Vor%

Dank Marc Gravell in ein besser lesbares Format geändert:

%Vor%

Alles ist gut, wenn Sie TypeDescriptor verwenden, aber wenn Sie:

verwenden %Vor%

Name hat den Text "Ich ändere mich".
Gibt es eine Möglichkeit, dieses Attribut zur Laufzeit zu ändern?

Bearbeiten:
Ich brauche dies für Linq2Sql im Designer der generierte Code hat das DB-Schema. Ich möchte das Standardschema des Benutzers verwenden, ohne XML-Mapping zu verwenden, oder den generierten Code ändern (die Tabelle befindet sich noch in der Entwicklungsphase und ändert sich häufig).

Der Designer-Code lautet:

%Vor%

Ich möchte, dass das Attribut lautet:

%Vor%

Jetzt habe ich in den Framework-Code gegraben und ich denke, linq2sql verwendet:

%Vor%

Wenn ich TypeDescriptor zum Ändern des Attributs verwende, wird der Wert in GetCustomAttributes nicht geändert.

    
___ tag123linqtosql ___ LINQ to SQL ist eine Komponente von .NET Framework Version 3.5, die eine Laufzeitinfrastruktur für die Verwaltung relationaler Daten als Objekte in Microsoft SQL Server bereitstellt. ___ tag123attributes ___ Das Attribut-Tag sollte für alle Probleme verwendet werden, die sich auf eine Eigenschaft eines Objekts, Elements oder einer Datei usw. beziehen. ___ answer4816805 ___

Vermeiden Sie die Reflexion vollständig , und zwar über %code% :

%Vor%     
___ tag123net35 ___ Die Version 3.5 von .NET Framework, die auf dem 2.0 .NET Framework mit zusätzlichen Assemblys (einschließlich 3.0) basiert. Verwenden Sie für Fragen, die sich speziell auf .NET Framework 3.0 beziehen. Bei Fragen zu .NET Framework verwenden Sie im Allgemeinen das .net-Tag. ___
Xhalent 27.01.2011 13:03
quelle