powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
9 сообщений из 9, страница 1 из 1
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983361
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?

Честно говоря, понятно почему. Не доделано. DI подключается и создает инстансы только во время рендерения компонента (компонент здесь и далее просто .razor класс). Раз мой бизнес класс не рендерится, то не жди и инжекта при обьявлении типа

Код: c#
1.
2.
            [Inject]
            private DAL.DALClass dal { get; set; }


Вопрос: как заставить Блэзор инжектировать в мой бизнес класс

Код: c#
1.
2.
3.
4.
public class ServerDesktopDTO : DesktopDTO
    {
        [Inject]
        protected DAL.DALClass dal { get; set; } <-- всегда NULL!!!!



Что я делаю сейчас, инжектирую тот же DALClass в компонент (можно. Компонент рендерится), а потом начинаю его пропагировать по моим бизнесс классам типа

Код: c#
1.
 ServerDesktopDTO sdesktop = new ServerDesktopDTO(dal);



Чот не то. ПОшло. Как это сделать получше?
Спасибо.
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983370
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты в в обычном классе используешь [Inject]? Он как бы совсем не для этого. Он вообще ни для чего. Если тебе надо заинжектить сервис в обычный класс - используй обычный constructor injection, если в разоровский компонент, то используй стандартную директиву @inject. А этот аттрибут он, по сути, для внутреннего использования - компилятор разора метит им свойства которые объявлены через @inject.
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983374
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

>используй обычный constructor injection

Я не знаком с техникой этого дела. Мой код в .razor
@code
{
MyClass m = new MyClass();
}

И вот в MyClass надо передать DALClass из DI контейнера (он там скоупед и создавать новый инстанс мне не надо)

Если я обьявляю параметризованный конструктор типа

public class MyClass
{
public MyClass(DALClass dal)
{
}
}

то

MyClass m = new MyClass();

в разоре не прокатит. Значит я должен в разоре иметь инстанс DALClass и передавать его в конструктор. Но я хочу, чтоб DI инжектировал DALClass Scope, а не его куда-там провайдил.
Иначе возникает каскад таких передач в другие классы
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Код: c#
1.
        protected DAL.DALClass dal { get; set; } <-- всегда NULL!!!!

...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983380
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov,

тебе в разоре надо написать вверху
Код: c#
1.
@inject MyClass MyObject



а в классе MyClass объявить конструктор
Код: c#
1.
2.
3.
4.
5.
6.
private DALClass _dal;

public MyClass(DALClass dal)
{
    _dal = dal;
}



И, конечно, все это зарегистрировать в DI-контейнере на старте приложения:
Код: c#
1.
2.
services.AddTransient<MyClass>();
services.AddTransient<DALClass>();



А еще, если ты используешь DI, то лучше сразу отделять интерфейсы от реализации и инжектить интерфейсы, а не классы.
Код: c#
1.
@inject IMyInterface MyInterface


Код: c#
1.
2.
3.
4.
5.
6.
private IDALInterface _dal;

public MyClass(IDALInterface dal)
{
    _dal = dal;
}


Код: c#
1.
2.
services.AddTransient<IMyInterface, MyClass>();
services.AddTransient<IDALInterface, DALClass>();
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983382
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Не-не. Пробовал и паблик. Та же фигня.
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983384
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут нифига непонятно, что у тебя из этого всего компонент, короче сделай как показал fkthat

Renziglov
Раз мой бизнес класс не рендерится, то не жди и инжекта при обьявлении типа
не очень понятно, насколько ты понимаешь работу DI.
Ты должен свой бизнес-класс извлекать из DI. Забудь про new
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, кстати, момент
https://ru.wikipedia.org/wiki/DTO Data Transfer Object (DTO) — один из шаблонов проектирования, используется для передачи данных между подсистемами приложения. Data Transfer Object,
в отличие от business object или data access object не должен содержать какого-либо поведения .
...
Рейтинг: 0 / 0
Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
    #39983402
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov,

А брали бы 20 лет назад на работу гениев, может и научили бы вас программировать
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Blazor [Inject] работает по-разному в коде компонента и в коде бизнесс-класса. Почему?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]