Поделитесь диалогами Blazor между проектами в пределах одной решения

Вопрос или проблема

У меня есть решение с несколькими проектами .net core 8 blazor, включая библиотеку классов, используемую для общего кода:

Решение

  • Проект 1
  • Проект 2
  • Общая библиотека

Теперь я хотел бы делиться диалогами Blazor. Мои проекты Blazor используют MudBlazor для пользовательского интерфейса. По какой-то причине это не работает:

  • Диалог находится в Проекте 1 –> Диалог может быть повторно использован в Проекте 1, но не в Проекте 2
  • Диалог находится в Проекте 2 –> Диалог может быть повторно использован в Проекте 2, но не в Проекте 1
  • Диалог находится в Общей библиотеке –> Диалог не может быть использован ни в одном проекте Blazor.

Моя среда разработки не показывает никаких предупреждений до тех пор, пока код не будет скомпилирован. Затем я получаю эту ошибку:
Ошибка CS0246: Не удалось найти имя типа или пространства имен 'CreateNewFolder' (возможно, отсутствует директива using или ссылка на сборку?)

Оба Проект 1 и Проект 2 ссылаются на проект Общая библиотека, и у меня есть директива using в верхней части меню навигации, откуда предполагается вызвать диалог:

@using SharedLibrary.Shared

Этот метод вызывает диалог:

private void ShowNewFolder(MouseEventArgs _obj)
{
    ShowNewFolderDialog = true;
    var options = new DialogOptions { CloseOnEscapeKey = true,  MaxWidth = MaxWidth.Medium };
    DialogService.ShowAsync<CreateNewFolder>("Создать новую папку", options);
}  

Я пытался найти соответствующий вопрос, но не могу найти никого, у кого была бы такая же проблема. Скорее всего, я упускаю что-то очень основное.
Пожалуйста, не могли бы вы объяснить, что мне следует сделать, чтобы я мог делиться диалогами между проектами?

Спасибо 🙂

Ответ или решение

Чтобы поделиться диалогами Blazor между несколькими проектами в одном решении, необходимо убедиться, что вы правильно настроили структуру своего решения и ссылки на библиотеки. Давайте рассмотрим пошаговое решение вашей проблемы.

Шаг 1: Убедитесь, что диалог находится в библиотеке

Во-первых, убедитесь, что класс вашего диалога (например, CreateNewFolder) расположен в проекте SharedLibrary и имеет модификатор доступа public. Пример класса:

using MudBlazor;

namespace SharedLibrary.Shared
{
    public partial class CreateNewFolder
    {
        // Здесь определите параметры вашего диалога, например:
        private string folderName;

        private void CreateFolder()
        {
            // Логика создания папки
        }
    }
}

Шаг 2: Добавьте ссылки между проектами

Убедитесь, что оба ваших Blazor-проекта (Project 1 и Project 2) ссылаются на SharedLibrary. Перейдите в свойства каждого проекта и добавьте ссылку на SharedLibrary, если она еще не добавлена.

Шаг 3: Регистрация сервисов MudBlazor

Убедитесь, что MudBlazor правильно настроен в обоих ваших проектах. Обычно это делается в файле Program.cs каждого проекта, где нужно добавить MudBlazor как сервис:

builder.Services.AddMudServices();

И также убедитесь, что в wwwroot/index.html или Pages/_Host.cshtml (в зависимости от типа вашего проекта Blazor) правильно подключены CSS и JS файлы MudBlazor:

<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<script src="_content/MudBlazor/MudBlazor.min.js"></script>

Шаг 4: Использование диалога в проекте

Когда вы хотите вызвать диалог из другого проекта, убедитесь, что вы импортировали пространство имен в верхней части файла, откуда вы вызываете диалог:

@using SharedLibrary.Shared

Вы также должны убедиться, что у вас правильно внедрен IDialogService в компоненте, где вы хотите использовать диалог. Например:

@inject IDialogService DialogService

@code {
    private async Task ShowNewFolder(MouseEventArgs _obj)
    {
        var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Medium };
        await DialogService.ShowAsync<CreateNewFolder>("Create New Folder", options);
    }
}

Шаг 5: Проверка на ошибки

Если после выполнения всех шагов вы все еще видите ошибку CS0246, попробуйте выполнить следующие действия:

  1. Убедитесь, что имя класса правильно указано в методе вызова диалога (без ошибок в написании).
  2. Убедитесь, что ваш проект SharedLibrary успешно компилируется и нет ошибок в этом проекте.
  3. Попробуйте очистить и пересобрать решение (Clean and Rebuild).
  4. Убедитесь, что все проекты используют совместимые версии MudBlazor.

Заключение

Следуя этим шагам, вы сможете успешно делиться диалогами между вашими проектами Blazor. Если после выполнения всех шагов проблема сохранится, возможно, стоит проверить документацию MudBlazor или обратиться к сообществу для получения более подробной помощи. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...