Bu yazımda birden fazla proje ile
MVC Areas oluşturma ve kullanmayı nasıl gerçekleştirebileceğimizi göstermeye çalışacağım ve hazırladığım örneği sizlerle paylaşacağım. Asp.net MVC 2.0 ile gelen önemli bir özellik olan
Areas özelliği ile hazırlanacak sistemi alt parçalra ayırıp, ayrı ayrı geliştirme yapabiliyoruz. Bunu da tek proje kullanarak veya birden fazla projeyi birleştirerek yapabiliyoruz. Bu yazımda birden fazla proje ile
Areas özelliğini kullanmayı göstermeye çalışacağım. Tek proje üzerinde
Areas özelliğini de başka bir yazımda açıklamaya çalışacağım. Şimdi sırayla birden fazla proje kullanarak
MVC Areas özelliğini nasıl yapacağımıza bakalım.
Öncelikle bu işlem için en güncel MVC sürümünü (
MVC 2.0 Preview 2) ve Visual Studio 2008 Service Pack 1 (veya daha güncel Visual Studio sürümleri)'i kurmuş olmamız gerekiyor. Bu kurulumlar tam ise
MVC Areas özelliğini kullanmaya başlayabiliriz.
İlk olarak oluşturacağımız çoklu proje yapısında ana proje olacak olan projeyi oluşturuyoruz (Paylaşacağım örnekte proje adı
MvcAreas). Visual Studio'da
File ~ New Project sekmesi altında çıkan pencerede
Asp.Net MVC 2 Web Application seçiyoruz. (
Name olarak istediğimizi veriyoruz.
Solution olarak
Create new Solution seçiyoruz.) Bu şekilde ana projemizi oluşturuyoruz.
Ardından ana proje ile birlikte alt projeleri oluşturuyoruz (Örnekte
Blog ve
Forum alt projeleri olacak). Bunun için
File ~ New Project sekmesini seçip çıkan ekranda aşağıdaki gibi seçim yapıyoruz.
Bu şekilde oluşturacağımız alt projelerin hepsini sırayla oluşturuyoruz. Alt projeleri oluşturduktan sonra her alt projeyi ana projeye referans olarak ekliyoruz. Bunun için ana proje üzerinde
Add Reference diyerek alt projeleri referans olarak ekliyoruz. Aşağıdaki gibi tüm alt projeleri referans olarak ana projeye ekliyoruz.
Bu işlemleri yaptıktan sonra oluşan yapının dizin görünümü aşağıdaki olacak.
Ana proje dışındaki alt projelerde bulunan Content (css dosyaları için), Scripts(script dosyaları için) klasörlerini, Global.asax dosyalarını, web.config dosyalarını, Controllers klasörü altında bulunan dosyaları (controller dosyalarını), Views altında bulunan klasör ve web.config dosyalarını siliyoruz.
Silme işlemlerinden sonra alt projeleri
Areas özelliğine uygun hale getirmek için her alt proje altındaki Controller klasörü altına ve Views klasörü altına her alt proje için gerekli controller dosyalarını ve view'ları (sayfaları) oluşturmamız gerekiyor. (Alt projelerdeki Controller dosyalarının içeriğini örnekte bulabilirsiniz.)
Dizinleri ayarladıktan sonra her alt projenin ana proje ile çalışmasını sağlayacak olan adımlardan biri olan
Routes tanımlama işini yapmamız gerekiyor. Bunun için de her alt projeye birer adet .cs uzantılı dosya (
Routes.cs veya başka isimde bir dosya) ekliyoruz ve burada her alt proje için
Routes tanımlaması yapıyoruz. Tanımladığımız bu Route'ların ana projede tanımlanması için ise ana projemizde bulunan
Global.asax dosya içinde tanımlanan RegisterRoutes metodu içinde şöyle bir satır ekliyoruz.
AreaRegistration.RegisterAllAreas(); Bu satırı ekledikten sonra her alt projede tanımlanan Routes'lar ana projeye de yansıyacak ve sorunsuzca çalışacaktır.
Ancak
Areas özelliğini daha tamamlamadık ve bu şekilde projemiz çalışır durumda değil. Son olarak yapmamız gereken her projeyi unload edip, proje ayarlarının tutulduğu .csproj uzantılı dosyaları düzenlemek olacak. Bunun için her projeyi (ana proje de dahil)
Solution Explorer'da her proje simgesi üzerinde sağa tıklayıp
Unload Project diyerek unload ediyoruz. Daha sonra yine
Solution Explorer'da her proje simgesi üzerinde sağa tıklayıp,
Edit .....csproj diyerek açılan ekranda Xml formatta olan ve projelerin ayarlarının muhafaza edildiği dokümanda gerekli ayarları yapıyoruz. Burada yapmamız gerekenler zaten yorum (command) ve İngilizce olarak belirtilmiş.
Areas özellği için belirtilen yerleri düzenliyoruz (uncommand hale getiriyoruz). Ayrıca alt ve ana proje için düzenlenmesi gereken bölümde mevcut. Buraları da alt ve ana projeye uygun olarak düzenliyoruz (uncommand hale getiriyoruz). Burada yaptığımız çoklu projelerde
Areas özelliğini aktifleştirmek ve kullanmak için gereken ayarlamalar. Bu ayarlar yorum olarak (command) gerekli yerlerde muhafaza edilmiş ve biz bunları yorum olmaktan çıkarıp (uncommand), Areas özelliğini aktifleştiriyoruz.
Tüm bunları yaptıktan sonra artık
Asp.net MVC Areas özelliği birden fazla proje arasında sağlanmış ve kullanılabilir durumda.
Şimdi çeşitli adımlarda belirttiğim, yapmamız gereken kod değişikliklerine örnek vermek istiyorum. Öncelikle her alt proje içinde tanımlamamız gereken
Routes'ları tanımladığımız dosyanın içeriğine bakalım (Örnekte paylaştığım
Blog alt projesi için
Routes.cs içeriği).
namespace Blog
{
public class Routes : AreaRegistration
{
public override string AreaName
{
get { return "Blog"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Blog_Default",
"Blog/{action}/{id}",
new { controller = "Blog", action = "Anasayfa", id = "" }
);
}
}
}
Bu şekilde her alt proje için ayrı ayrı
Routes tanımlayabiliyoruz. Tanımlanan bu
Routes'lar ise daha önce belirttiğim gibi ana projede yer alan
Global.asax dosyası içindeki RegisterRoutes metodu içinde
AreaRegistration.RegisterAllAreas(); diyerek etkinleştirmiş oluyoruz.
Bunları yaptıktan sonra MVC içinde yer alan ve linkleri oluşturmamızı sağlayan metotları kullanırken ise
Areas özelliğini aşağıdaki gibi belirtebiliyoruz.
<%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)%>
<%= Html.ActionLink("Blog", "Anasayfa", "Blog", new { area = "Blog" }, null)%>
<%= Html.ActionLink("Forum", "Anasayfa", "Forum", new { area = "Forum" }, null)%>
Bu şekilde Asp.net MVC ile birden fazla proje kullanarak
Areas özelliğini kullanmış oluyoruz. Bu yapıyı çok kapsamlı projelerde kullanabiliriz. Büyük projeleri alt sistemlere ayırarak bu şekilde parça parça hazırlayabiliriz. Bu bakımdan oldukça kullanışlı, projelerin yönetimini, denetimini, esnekliğini artıran bir özellik.
Yazımda kullandığım örneği ve çalışır halini
buradan indirebilirsiniz.
İyi Çalışmalar.
Kaynak