ObjectDataSource에서 싱글톤 및 인터페이스 사용하기. ASP.NET
2009.05.28 19:01 EDIT
기존에 사용하던 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(); }