ObjectDataSource에서 싱글톤 및 인터페이스 사용하기. ASP.NET

기존에 사용하던 ObjectDataSource 코드.

    <asp:ObjectDataSource ID="BannerDataSource" runat="server" TypeName="Manalith.Manager.BannerManager"
        DataObjectTypeName="Manalith.Data.Banner" SelectMethod="GetBannerList"  />

여기서 만약 BannerManager가 싱글톤을 구현한 클래스라면, 실행시 생성자를 찾을 수 없다는 에러가 발생할 것이다. 따라서 싱글톤 클래스를 쓰기 위해선, 다음과 같이 ObjectDataSource 컨트롤에에 OnObjectCreating 이벤트 핸들러를 등록해 주어야 한다.

<asp:ObjectDataSource ...  OnObjectCreating="BannerDataSource_ObjectCreating" ... />

그리고 코드비하인드에 메서드를 만든다.

    protected void BannerDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
    {
        e.ObjectInstance = BannerManager.Instance; 
    }

이렇게 하면 ObjectDataSource 컨트롤은 지정된 TypeName의 클래스 인스턴스를 다시 생성하려고 시도하지 않기 때문에 문제없이 쓸 수가 있다.

만일 BannerManager라는 클래스 대신에 IBannerManager라는 인터페이스를 쓰고 싶으면, TypeName을 인터페이스로 변경하고, 싱글톤의 경우와 마찬가지로 OnObjectCreating 이벤트 핸들러를 등록한다.

    <asp:ObjectDataSource ID="BannerDataSource" runat="server" TypeName="Manalith.Manager.IBannerManager"
        DataObjectTypeName="Manalith.Data.Banner" SelectMethod="GetBannerList" OnObjectCreating="BannerDataSource_ObjectCreating" />

그리고 해당 메서드 내용을 적절하게 작성하면 된다.

    protected void BannerDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
    {
        e.ObjectInstance = BannerManagerFactory.CreateBannerManager(); 
    }

 

Tag :
,

Leave Comments