14 Aralık 2023 Perşembe

Örnek DI uygulaması 3 - Projeye Müşterileri gösterecek yeni frame eklemek

 Bu aşamada her modül için bir uXxxDisplayer.pas ve bir View.Xxx.pas unit'lerini oluşturacağız. 

Önce View.Customers.pas'ı oluşturalım. Boş bir VCL Frame oluşturalım. Bunun üzerine 2 adet TPanel koyalım, Panel2'nin Align özelliği alBottom, Caption boş, Panel1'in Align özelliği alClient Caption boş olsun. Panel1 üzerine bir DBGrid koyalım, özelliklerini şu şekilde değiştirelim;

Align=alClient 

DataSource=DataSource1

ReadOnly=True

Options.dgEditing=False

Options.RowSelect=True

Frame adını TframeCustomers yapalım.

Create yapılandırıcısını ekleyelim

constructor TframeCustomers.Create(AOwner: TComponent);
var
  aConnection: IMyConnection;
begin
  inherited;
  aConnection := GlobalContainer.Resolve<IMyConnection>('connection', []);
  DataSource1.DataSet := aConnection.GetQuery('select * from Customer order by CustomerId');
end;

Şimdi uCustomerDisplayer.pas'ı oluşturalım.
unit uCustomersDisplayer;


interface
uses System.Classes, uInterfaces, Vcl.Controls, Vcl.ExtCtrls, View.Customers;

type
  TCustomersDisplayer = class(TInterfacedObject, IDisplayOnPanel)
  public
    procedure DisplayOnPanel(const aPanel: TPanel);
  end;

implementation

{ TInventoriesDisplayer }

procedure TCustomersDisplayer.DisplayOnPanel(const aPanel: TPanel);
var frm : TframeCustomers;
begin
  frm := TframeCustomers.Create(aPanel);
  frm.Parent := aPanel;
  frm.Align := alClient;
end;

end.
Son olarak uRegistration.pas ve View.MainForm.pas'ta eklemeler yapmamız gerekli.
uRegistration.pas şu şekli alacak.
unit uRegistration;

interface

uses
  Spring.Container, uInterfaces;

procedure RegisterInterfaces(aMyConnection : IMyConnection);

implementation
uses
      uInventoriesDisplayer
    , uCustomersDisplayer
    ;

procedure RegisterInterfaces(aMyConnection : IMyConnection);
begin
  GlobalContainer.RegisterType<IDisplayOnPanel, TInventoriesDisplayer>('inventories');
  GlobalContainer.RegisterType<IDisplayOnPanel, TCustomersDisplayer>('customers');

  GlobalContainer.RegisterInstance<IMyConnection>(aMyConnection, 'connection');

  GlobalContainer.Build;
end;

end.

MainForm'da Müşteriler butonunun OnClick event'ine şunları ekleyeceğiz. 

Bu işlemlerden sonra artık Müşteriler butonuna tıkladığımızda veritabanındaki Customer tablosunu View.Customers.pas'ta frameCustomers üzerindeki dbgridde görüntülenecektir.
Bu şeklinin kodlarını şu linkten indirebilirsiniz : DITest-2.rar













Hiç yorum yok:

Yorum Gönder