0

アプリケーションの通知プロバイダー(アラート)を構築しようとしています。現在、リクエスト間で通知を生成するだけで済みますが、この機能をプロバイダーでラップすると、後でデータベースに接続できるようになります。

3種類の通知があります。

public enum NotificationType
{
    Success,
    Error,
    Info
}

および通知オブジェクト:

public class Notification
{
    public NotificationType Type { get; set; }
    public string Message { get; set; }
}

すべての通知を入れてList<Notification>ロードしたいViewData["Notifications"]

次に、ヘルパーを使用してそれを読み取りViewData["Notifications"]、レンダリングすることができます。

オブジェクトを維持する独自のNotificationProviderを実装したいと思いList<Notification>ます。

プロバイダーにTempData["Notifications"]を読み取って、List<Notification> Notifications変数にロードしてもらいたい。次に、ヘルパーが使用できるように、通知をViewData["Notifications"]にロードできます。

以下のコードは機能していませんが、私がやろうとしていることを示していると思います。

public class NotificationProvider
{
    public List<Notification> Notifications { get; set; }

    private Controller _controller;

    public NotificationProvider(Controller controller /* How to pass controller instance? */)
    {
        _controller = controller;

        if (_controller.TempData["Notifications"] != null)
        {
            Notifications = (List<Notification>)controller.TempData["Notifications"];

            _controller.TempData["Notifications"] = null;
        }
    }

    public void ShowNotification(NotificationType notificationType, string message)
    {
        Notification notification = new Notification();

        notification.Type = notificationType;
        notification.Message = message;

        Notifications.Add(notification);

        _controller.TempData["Notifications"] = Notifications;
    }

    public void LoadNotifications()
    {
        _controller.ViewData["Notifications"] = Notifications;
    }
}

そして、各コントローラーで、NotificationProviderインスタンス:

public class HomeController
{
    private NotificationProvider notificationProvider;

    public HomeController()
    {
        notificationProvider = new NotificationProvider(/* Controller instance */);
        notificationProvider.LoadNotifications();
    }
}

質問:

コントローラインスタンスをNotificationProviderクラスに渡して、TempDataオブジェクトとViewDataオブジェクトにアクセスできるようにするにはどうすればよいですか。または、可能であれば、NotificationProviderインスタンスからこれらのオブジェクトに直接アクセスするにはどうすればよいですか?

4

1 に答える 1

1

私はあなたがこれを通過したいだけだと思います、そのように。また、コメントから戻ると、TempDataはアクションでのみ使用できます。

public class HomeController
{
    public ActionResult Index()
    {
        var notificationProvider = new NotificationProvider(this);
        notificationProvider.LoadNotifications();
        return View();
    }
}
于 2012-06-03T23:06:17.017 に答える