2009-03-09 26 views
3

derlenmemiş bir .aspx içinde, bir aspx için 2 kısmi sınıf dosyaları olması mümkün mü? Ben böyle bir şey yapmak çalışıyorum: ASP.Net Birden çok kaynak dosya

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

Hem Standart ve Default2 kısmi sınıf tanımlanmış olan

Güncelleme: Evet .. O derlenmiş değil ya da sadece gelen dll ayna ediyorum gibi nokta tartışmalı olurdu/bin dizininde. Kaynağın düzenli olarak değiştirilmesi gerektiğinden, bunun derlenmemesi gerekiyor. Muhtemelen aspeksi güncellemek için bir yol bulabilirdim, ama bunu yapmak zorunda kalmak istemiyorum.

İki kaynak dosya kullanmama neden olmamızın nedeni, veritabanıma bağlanan çok fazla kaynak kodu olmasıdır. Ben db şeylerle ve diğer mantığa karışmak için başka biriyle uğraşacak bir insanım var. Bu dosyaları ayrı ayrı bulundurmayı tercih ederim, bu nedenle,

cevap

6

Evet ve hayır. Evet, dilediğiniz kadar çok kısmi derse sahip olabilirsiniz. Hayır, bunu yapamazsınız (veya bunu yapmak zorundasınız!) Bunları sizin sayfa yönergelerinizde belirtin. Default.aspx.cs içinde

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

:

public partial class Default 
{ /*yadda*/ } 

Default2.aspx.cs içinde:

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

Kısmi sınıfları derleyici bir yanılsama. CLR söz konusu olduğu sürece mevcut değiller. C# derleyicisi derleme sırasında tüm kısmi sınıfları bir araya getirir; asp.net derleyicisinin bakış açısından sadece bir tane varsayılan sınıf var.


Güncelleştirmenizden, ihtiyacınız olan şeylerin çoklu kısmi sınıflar değil kodunuzu yeniden kodlamak için olduğu gibi geldiği anlaşılıyor. Kısmi sınıflar fikrini bırakmalı ve bağımlılık enjeksiyonu/kontrolü tersine çevirmelisiniz. Db mantığınızı ve diğer ilgi alanlarınızı ayırın, arabirimleri kullanarak bunları tanımlayın ve daha sonra çalışma zamanında bir DI kapsayıcı çerçevesi kullanarak bu "sağlayıcıların" istenen uygulamasını enjekte edin.

Bu, kodunuzu ayırır ve uygulamanıza çok daha fazla esneklik, test edilebilirlik ve güncelleme kolaylığı sağlar; iki veya daha fazla dosyaya kod ayırmaktan çok daha iyi. DI'yi anlamak ve uygulamak oldukça kolaydır. DI için Unity kullanıyorum ve seviyorum. Hızlanmak için yaklaşık bir gün sürdü.

+1

Doğru, biliyorum ... sorun, aspx sayfasına 2 .cs dosyası olduğunu nasıl anlarım? – Rob

+0

Aspx sayfasının neden 2 .cs dosya olduğunu bilmesi gerekiyor? –

+0

Mike: Src özniteliği üzerinden dinamik derleme istiyor. CodeBehind'de olduğu gibi VS tarafından bir DLL için önceden derlenmemiştir, bu nedenle bu yaklaşım çalışmaz. –

1

No'larına bakmaya gerek duymadıkları kodlarla karmakarışık olmaları gerekmiyor, en çok bir Src özniteliği belirtilebilir.

0

Sorunuza doğrudan bir yanıt olmasa da, kodu birleştirmek için bir taban sayfasından miras almayı düşündünüz mü? senin CustomBasePage.cs ise

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

    } 
} 

: senin Default.aspx.cs olarak

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

     //Your custom code 
    } 
} 

Eğer default.aspx.cs vb olaylar yöntemleri geçersiz kılmak gerekirse, olmak emin olun ve temel yöntemleri arayın.

İlgili konular