2009-03-09 8 views
3

in einem noncompiled ASPX, ist es möglich, 2 partielle Klassendateien für ein aspx zu haben? Ich versuche, wie etwas zu tun: ASP.Net Mehrere Quelldateien

 
    <%@ Page 
     Language="C#" 
     inherits="_Default" 
     src="Default.aspx.cs" 
     src="Default2.aspx.cs" %> 

Sowohl Standard und Voreinstellung2 hat die partielle Klasse

aktualisieren definiert: Yep .. Es ist nicht kompiliert oder der Punkt wäre gegenstandslos, da ich nur die entsprechende DLL würde chuck im Verzeichnis/bin. Ich muss dies nicht kompiliert haben, da die Quelle regelmäßig geändert werden muss. Ich könnte wahrscheinlich einen Weg finden, die ASPX einfach zu aktualisieren, aber ich möchte das nicht tun müssen.

Der Grund, warum ich zwei Quelldateien verwende, ist, dass es eine Menge Quellcode gibt, der mit meiner Datenbank verbunden ist und was nicht. Ich habe eine Person, die mit dem db-Zeug und einer anderen Person, die mit der anderen Logik zu meckern hat. Ich würde es vorziehen, diese Dateien getrennt zu haben, damit sie Code nicht durcheinanderwirbeln müssen, den sie nicht betrachten müssen

Antwort

6

Ja und nein. Ja, Sie können so viele Teilklassen haben, wie Sie möchten. Nein, Sie können (und müssen es auch nicht!) In Ihrer Page-Direktive angeben.

<%@ Page 
     Language="C#" 
     inherits="Default" %> 

in Default.aspx.cs:

public partial class Default 
{ /*yadda*/ } 

in Default2.aspx.cs:

public partial class Default 
{ /* even more yadda */ } 

Teilklassen sind eine Illusion des Compilers. Sie existieren nicht, soweit es die CLR betrifft. Der C# -Compiler fügt alle Teilklassen während des Kompilierens zusammen. Aus der Sicht des Asp.net-Compilers gibt es nur eine Default-Klasse.

Klingt wie von Ihrem Update, dass Sie nicht mehrere Teilklassen benötigen, sondern Ihren Code umgestalten. Sie sollten die Idee der partiellen Klassen fallen lassen und mit der Abhängigkeitsinjektion/-inversion der Kontrolle fortfahren. Trennen Sie Ihre db-Logik und andere Problembereiche, definieren Sie sie mithilfe von Schnittstellen, und injizieren Sie zur Laufzeit die gewünschte Implementierung dieser "Provider" mithilfe eines DI-Containerframeworks.

Dies trennt Ihren Code und gibt Ihrer Anwendung viel mehr Flexibilität, Testbarkeit und einfache Aktualisierung; viel besser als nur das Teilen von Code in zwei oder mehr Dateien. DI ist auch ziemlich einfach zu verstehen und zu implementieren. Ich benutze Unity für DI und liebe es. Es dauerte ungefähr einen Tag, um sich darauf einzustellen.

+1

Richtig, ich weiß das .. das Problem ist, wie sage ich der aspx Seite, dass es 2 .cs Dateien gibt? – Rob

+0

Warum muss die aspx-Seite wissen, dass es 2 .cs-Dateien gibt? –

+0

Mike: Er möchte dynamische Kompilierung durch Src Attribut. Es ist nicht vorkompiliert zu einer DLL von VS wie in CodeBehind, so dass dieser Ansatz nicht funktioniert. –

1

Nein, höchstens ein einzelnes Src Attribut kann angegeben werden.

0

Während Sie keine direkte Antwort auf Ihre Frage haben, haben Sie erwogen, von einer Basisseite zu übernehmen, um den Code zusammenzuführen?

In Ihrem Default.aspx.cs:

public partial class Default : CustomBasePage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

In Ihrem CustomBasePage.cs:

public class BasePage: System.Web.UI.Page 
{ 
    protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 

     //Your custom code 
    } 
} 

Wenn Sie Ereignisse Methoden usw. in Ihrem default.aspx.cs außer Kraft zu setzen, sein sicher und rufen Sie die Basismethoden auf.