コード ビハインドでオブジェクトをインスタンス化することはありません。私がしているのは、オブジェクトをインスタンス化するサービスを呼び出すことです。これは、オブジェクトをデータベースからのデータでインスタンス化します。また、マスターページでサービスを公開し、次のように参照します。
IUser _user = (Page.Master as MasterBase).RegistrationService.GetPersonFromEmailAddress(txtUser.text);
もちろん、(Page.Master as MasterBase)がnullでないことを確認する必要があります....
リクエストによる編集
他のすべてのサイト マスター ページが継承する必要があるベース マスター ページを作成します。この基本マスター ページのコンストラクターで、必要なすべてのサービスをインスタンス化します。もちろん、サービスがサイト全体で使用されていない場合は、別の、より適切なセクション全般のマスター ページでインスタンス化できます。
public readonly IRegistration RegistrationService;
public readonly IEventService EventService;
public readonly IEmailSendingService EmailService;
private readonly IMenuService _menuService;
public MasterBase()
{
RegistrationService = new BusinessLogic.Registration(DatabaseConnectionString);
EventService = new EventService(DatabaseConnectionString);
var fromAddress = ConfigurationManager.AppSettings["Webmaster"];
var defaultToEmailAddress = ConfigurationManager.AppSettings["toEmail"];
EmailService = new EmailSendingService(BaseUrl, fromAddress, defaultEmailAddress);
_menuService = new MenuService(DatabaseConnectionString);
}
前述のように、サイトで使用されるすべてのマスター ページは、ベースから継承されます。
public partial class MasterContent : MasterBase
マスター ページを参照する任意の UI ページ (私の場合はほぼすべて)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="activities.aspx.cs" Inherits="activities" MasterPageFile="~/MasterContent.Master" %>
コード ビハインドでさまざまなサービスにアクセスできるようになりました。
IUser _user = (Page.Master as MasterBase).RegistrationService.GetPersonFromEmailAddress(txtUser.text);
以下のコメントで述べたように、さまざまな UI ページはベース マスター ページと密結合していますが、一般的な ASP.NET Web フォーム アプリケーションでこれを行うより良い方法を知りません。これにより、すべての UI ページでサービスをインスタンス化する必要性が軽減され、プロジェクト固有の観点から、すべてのマスター ページをこのベース ページから継承することが許容されます。