Makale Özeti

Visual Studio içerisinde SCSF nasıl kullanılır

Makale

Bu seri ile birlikte sıfırdan başlayıp tüm CAB elemanlarını kullanmayı öğrendik. Şimdide Visual Studio içerisinde SCSF nasıl kullanılır olduğunu öğreneceğiz. Burada ki tüm kurulum adımlarını izlediniz ve SCSF bilgisayarınıza yüklediniz. Artık yeni bir SCSF uygulaması yazmaya hazırsınız. Bu seri ile incelediğimiz Easy TaskBar uygulamasını birde SCSF kullanarak tekrar yazalım.



Demo Öncelikle Yeni bir SCSF uygulaması başlatmalıyız. Uygulamayı ilk oluşturmak istediğinizde karşınıza Root Namespace ve dll kütüphanesinin yerini soran bir ekran gelecektir.

Sağ tarafta SCSF oluşturacağı dosyaları göstermektedir. Tüm uygulamalar için ortak olan kod bloğu Infrastructure içerisine alınmıştır. Daha önce ki makalelerden hatırladığınız Shell Liblary Layout ve Interface projeleri Infrastructure içerisindedir. Finish’i tıkladığınızda SCSF sizin için bu beş projeyi oluşturacak ve gerekli kodları ekleyecektir. Oluşan kodları çalıştırdığımızda aşağıda ki gibi bir ekran görüntüsü çıkacaktır.


Infrastructure.Library projesini inceleyelim. Burada uygulamamız için önceden tanımlanmış birçok hazır servisin olduğunu görmekteyiz.

Burada ki servisler tüm uygulama için geçerli genel servislerdir. Sizin SCSF işleyişine müdahale etmek istediğiniz zaman kullanacağınız servislerdir. Infrastructure.Interface içerisinde Constants dizini içerisinde CommandNames, EventTopicNames, UIExtasionNames, WorkspaceNames sınıfları bulunmaktadır. Bu sınıflar adından da anlaşılacağı üzerinde uygulama genelinde kullanılacak isimlendirmelerdir. Şimdi Easy TaskBar uygulamamızı geliştirmeye başlayalım. Önce ProcessService sınıfını Infrastructure.Library’e IProcessService interface’ini Infrastructure.Interface’e ekleyelim. Daha sonrada WinFormAuthenticationService’i ekleyelim. Servis interfaceleri Infrastructure.Interface projesinde Service dizini altına eklenir. Servis tanımları da Infrastructure.Library projesinde Service dizini altına eklenir. Tüm servisleri daha sonra RootWorkItem üzerine ekleyelim.

namespace SmartClientDevelopmentSolution1.Infrastructure.Library {
public abstract class SmartClientApplication<TWorkItem, TShell> : WPFFormShellApplication<TWorkItem, TShell>
where TWorkItem : WorkItem, new()
where TShell : Form {
protected override void AddServices() {
base.AddServices();
// scsf tarafında gelen servisler
RootWorkItem.Services.AddNew<ProfileCatalogModuleInfoStore, IModuleInfoStore>();
RootWorkItem.Services.AddNew<WorkspaceLocatorService, IWorkspaceLocatorService>();
RootWorkItem.Services.Remove<IModuleEnumerator>();
RootWorkItem.Services.Remove<IModuleLoaderService>();
RootWorkItem.Services.AddNew<XmlStreamDependentModuleEnumerator, IModuleEnumerator>();
RootWorkItem.Services.AddNew<DependentModuleLoaderService, IModuleLoaderService>();
RootWorkItem.Services.AddOnDemand<ActionCatalogService, IActionCatalogService>();
RootWorkItem.Services.AddOnDemand<EntityTranslatorService, IEntityTranslatorService>();

// uygulama genelinde çalışacak kendi servislerimiz
IActionCatalogService actionCatalog = RootWorkItem.Services.Get<IActionCatalogService>();
actionCatalog.RegisterGeneralCondition(new SimpleActionCondition());
RootWorkItem.Services.Remove<IAuthenticationService>();
RootWorkItem.Services.AddNew<WinFormAuthenticationService, IAuthenticationService>();
RootWorkItem.Services.AddOnDemand<ProcessService, IProcessService>();
}
}…….
}
Şimdi de modüllerimizi oluşturalım.Ben modülleri SCSF alt yapısından ayırmak için yeni bir ‘Module’ dizisinin altına ekliyorum. Module dizinin üzerine sağ tıkladığınız zaman açılan menüde Smart Client Factory menüsünü göreceksiniz. Burada Business Module ve Foundational Module ekleme opsiyonları görüyorsunuz.



Business Module iş kodlarımızı yazdığımız içerisinde Servisler View’lar barındıran modüldür. Foundational Module Business Module’den farklı olarak uygulama genelinde kullanılan Infrastructure.Layout içerisinde ki ShellLayoutView Layout’u yerine bu modül için kullanılacak özel bir layout ile birlikte gelir. Biz yolumuza yeni bir Business Module oluşturarak devam edeceğiz. Menüden Business Modüle seçtikten sonra aşağıda ki ekran ile karşılaşıyoruz.


Burada OK tıklayıp devam ettiğimizde aşağıda ki ekran ile karşılaşıyoruz.



Burada oluşturduğumuz modül için Interface projesi, test projesi ve projeleri oluşturduktan sonra yardımcı bir doküman isteyip istemediğimizi sormaktadır. Eğer modül içerisinde ki her hangi bir bileşen tanımına diğer servislerden ulaşılacaksa Interface projesi eklememiz gerekmektedir. Eğer test projesi eklersek modülümüze eklediğimiz her View için test kodları otomatik olarak eklenecektir. OK tıklayıp modülümüzü oluşturalım. Sıra geldi tüm process’lerin listeleneceği NavigatorView’ını yazmaya.


WPF form veya normal Windows formdan View oluşturabilirsiniz. Biz normal View oluşturmayı seçelim. Bir sonraki adımda aşağıda ki ekran ile karşılaşacağız.



Burada oluşturduğumuz View’a ismini verelim. Genelde her View’ın kendi dizininde olması daha iyidir. Finish’i tıklayalım ve SCSF bizim için MVP pattern ile oluşturulmuş View ve Presenter sınıflarımızı oluştursun. Arayüz işlemlerini tamamladıktan sonra NavigatorViewPresenter üzerine bir event ekleyelim.



Bu adım ile birlikte NeedChanfePrecess event’ını presenter içine eklemiş olduk. Şimdi oluşturduğumuz navigator view’ı ilk çalışmada LeftWorkspace üzerinde açalım.
namespace SmartClientDevelopmentSolution1.NavigatorModule {
public class ModuleController : WorkItemController {
public override void Run() {
AddServices();
ExtendMenu();
ExtendToolStrip();
AddViews();
}

private void AddServices() {}

private void ExtendMenu() {
ToolStripMenuItem miRefresh = new ToolStripMenuItem();
miRefresh.Name = "miRefresh";
miRefresh.Text = "Yenile";
this.WorkItem.Commands[CommandNames.Refresh].AddInvoker(miRefresh, "Click");
this.WorkItem.UIExtensionSites[UIExtensionSiteNames.MainMenu].Add(miRefresh);
}

private void ExtendToolStrip() {
ToolStripButton btRefresh = new ToolStripButton();
btRefresh.Name = "btRefresh";
btRefresh.Text = "Yenile";
this.WorkItem.UIExtensionSites[UIExtensionSiteNames.MainToolbar].Add(btRefresh);
this.WorkItem.Commands[CommandNames.Refresh].AddInvoker(btRefresh, "Click");
}

private void AddViews() {
NavigatorView navigatorView = ShowViewInWorkspace<NavigatorView>(WorkspaceNames.LeftWorkspace);
}
}
}
Yukarıda gördüğünüz gibi ModuleController üzerinde modlülün ilk çalışmasında uygulamaya eklenecek Service, Menü, ToolStrip ve View’lar için ayrı ayrı fonksiyonlar açılmıştır. View’ı eklerken Yenile menülerimizi de ekliyoruz. Daha önce ki bölümlerde Eventlar’ın ve Command’ları ne olduğu ve nasıl çalıştığını incelemiştik. Burada tanımlamalarına yaptıktan sonra gerekli kodları NavigatorViewPresenter içine yazıyoruz. Şimdi uyglamamızı çalıştıralım.


Aynı adımları izleyerek Context modülü ve Contextview ‘ı oluşturalım ve uygulamamızı tamamlayalım.

Burada biz SCSF Visual Studio içerisinde nasıl kullanır olduğunu gördük. SCSF ile gelen MVP, Event Broker, Command, Action gibi kavramları anlamak için önce ki makalelere bakmanız gerekmektedir. Son bir not SCSF şu anda VS 2008 desteklememektedir. VS 2008 SCSF şubat 2008 içerisinde yayınlanacağı duyuruldu. Böylelikle 8 makalelik SCSF serisinin sonuna geldik bir sonra ki makale serisi Application Block Software Factory konusudur.