powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / выбор IoC
25 сообщений из 286, страница 11 из 12
выбор IoC
    #38476057
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
вообщето можно в ручную диспозить, никто не запрещает, если при разрушении хранилища кеша. возникнет повторный диспоз
да и хрен с ним, паттерн это допускает, наворотили понимаишь(с), я не удивлюсь если ди в пятом поколении миньет будут делать..
...
Рейтинг: 0 / 0
выбор IoC
    #38476059
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без мягкого знака, Жень.
...
Рейтинг: 0 / 0
выбор IoC
    #38476061
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Спасибо
...
Рейтинг: 0 / 0
выбор IoC
    #38476070
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУSeVaпропущено...


Муслима, грузить данные в конструкторе - полный маразм и блокировка экрана.
Решение простое - сервис навигации и асинхронная загрузка данных, те нормальный фреймворк, а не пионерский бред.
Твое понимание mvvm совершенно тупое - навесить на него все и вся(навигацию, валидацию, DAL, еtc), те довести до неудобоваримого состояния.
Дурилка, маразм у тебя в башке, а не в конструкторе. Никакой блокировки экрана не будет, будут доступны все формы, кроме той, которая тормозит. Это не сильверлайт с одним окном в браузере. Городить асинхроннын окна тут смысла не имеет. Твое понимание дотнета поверхностное и ограниченное. В конструкторе - инициализация данных. После загрузки окна возможны снова обращения к сервисам.

Муслима, нельзя быть немножко беременным. Если одна форма тормозит(а в твоем говноокносервисе унылый mdi), то тормозит все. А sl не пачкай своими потными, дрочливыми ручонками, там изначально заложена асинхронность именно на этот случай, чтобы тупой рукоблуд не морозил все.
Чтобы данные грузились после загрузки окна - это непосильная для тебя задача.
Ты способен только на это говно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public bool OpenEmployeeDetailWindow(Employee employee)
        {
            var view = new EmployeeDetailWindow();
            view.Owner = ActiveWindow;
            view.DataContext = new EmployeeViewModel { EmployeeId = employee.EmployeeId, FirstName = employee.FirstName, LastName = employee.LastName };

// три часа ждем, а потом показываем окно. пользовать уже заснул.
            return view.ShowDialog().GetValueOrDefault();
        }
...
Рейтинг: 0 / 0
выбор IoC
    #38476082
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ1. Мне нужен диспоуз после GetData. Где решение?
2. Я уточнил - это WPF, паттерн MVVM. Это не MVC и не MVP. Тут вью-модель может обращаться к сервисам, тут есть dual mode байдинги, тут много что есть. MVC этого и не снилось. Ну ладно, это всё философия.

Где решение???

то о чём ты говоришь, называется Unit Of Work.

пжалста:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class EmployeesViewModel : ViewModelBase
{
    private IWindowService WinService;

    public EmployeesViewModel(IWindowService windowService, Owned<IDataContext> context)
    {
        WinService = windowService;        
///         Context = context;  /// -- Нахуа тогда вот это нужно, если ты его сразу диспозишь???
        
        context.Value.GetData()... // обращение к сервису, что-то делаем
        context.Dispose(); // OK
    }
}



Owned<T> -- это Unit Of Work контейнер. говорит как бы само за себя.

можно ещё круче, генерация и уничтожение экземпляров под управлением DI, на лету:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
interface IMessageHandler
{
    void Handle(Message message);
}

class MessagePump
{
    Func<Owned<IMessageHandler>> _handlerFactory;
    
    public MessagePump(Func<Owned<IMessageHandler>> handlerFactory)
    {
        _handlerFactory = handlerFactory;
    }
    
    public void Go()
    {
        while(true)
        {
            var message = NextMessage();
            
            using (var handler = _handlerFactory())
            {
                handler.Value.Handle(message);
            }
        } 
    }
}



Какие-проблемы-то? я конечно склоняюсь к тому, что архитектурка тобою приведённая довольно таки хреновая, ибо что-то осмысленное в конструкторе делать -- моветон. нельзя. такие вещи надо поручать фабрикам и (в случае MVVM), диспетчеру. но никак не жётко хардкодить.
...
Рейтинг: 0 / 0
выбор IoC
    #38476085
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

и ещё

Код: c#
1.
private IWindowService WinService;



решарпера на тебя нет!
...
Рейтинг: 0 / 0
выбор IoC
    #38476089
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степивообщето можно в ручную диспозить, никто не запрещает, если при разрушении хранилища кеша. возникнет повторный диспоз
да и хрен с ним, паттерн это допускает, наворотили понимаишь(с), я не удивлюсь если ди в пятом поколении миньет будут делать..

проблема не в повторном диспозе. а в возможном обращении к трупу. на счёт способностей современных DI ты прав, эти черти позволяют очень много, уже давно выходящее за рамки изначального описания основ принципа паттерна. это хорошо.
...
Рейтинг: 0 / 0
выбор IoC
    #38476094
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MVVM-щикам в обязательном порядке читать Unit of Work in Rich Clients для понимания сути вселенной. ну и чтобы не пороть горячку с передачей контейнера вглубь классов, как будто сигареты без фильтра каким-нибудь заключённым на зону.

а вот полезная приблуда для профайлинга IoC (autofac), возможных проблем связанных с неправильным управлением времени жизни.
...
Рейтинг: 0 / 0
выбор IoC
    #38476139
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
авторпроблема не в повторном диспозе. а в возможном обращении к трупу. вот вот я еще и должен постоянно лазить
в регистрацию и смотреть какой кеш я заказал для объекта, мне все эти плюшки напоминают наличие критериев в хибере при живом
куерилабле, кому как, а мне легче написать свой di с инжекцией чем тащить этот велосипед с катафотами и брызговиками - может от того что он легко пишется в сети столько реализаций этой фишки, такое ощущение что только ленивый не приложил к нему руку,
и как правило в стиле рыночной экономики - пользуйтесь наш может то то и то то - что не могут другие..
...
Рейтинг: 0 / 0
выбор IoC
    #38476178
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиhVostt,
авторпроблема не в повторном диспозе. а в возможном обращении к трупу. вот вот я еще и должен постоянно лазить
в регистрацию и смотреть какой кеш я заказал для объекта, мне все эти плюшки напоминают наличие критериев в хибере при живом
куерилабле, кому как, а мне легче написать свой di с инжекцией чем тащить этот велосипед с катафотами и брызговиками - может от того что он легко пишется в сети столько реализаций этой фишки, такое ощущение что только ленивый не приложил к нему руку,
и как правило в стиле рыночной экономики - пользуйтесь наш может то то и то то - что не могут другие..

Dispose нужен только MCУ, чтобы дернуть за ручку унитаза и смыть свои отложения.
Возможность явно вызвать dispose появилась только в третьей версии, а до этого все жили без этого,
в нем все на слабых ссылках и сборщик памяти все спокойно убирал.
Общий контекст выполнения нужен только для того, чтобы не создавать одно и тоже сорок восемь раз во время бизнес-транзакции.
В WPF у контролов вообще нет dispose, тк это управляемые ресурсы.
...
Рейтинг: 0 / 0
выбор IoC
    #38476204
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМуслима, нельзя быть немножко беременным. Если одна форма тормозит(а в твоем говноокносервисе унылый mdi), то тормозит все. А sl не пачкай своими потными, дрочливыми ручонками, там изначально заложена асинхронность именно на этот случай, чтобы тупой рукоблуд не морозил все.
Дуралейка, нельзя быть немного идиотом - нет никакого MDI. Есть главное окно (Owner) и его дочерние окна. Если какое-то дочернее окно тормозит, это никак не влияет на работу всего остального. Опять ты глупости пишешь.

SeVaЧтобы данные грузились после загрузки окна - это непосильная для тебя задача.
Дурик, тебе твой сильверлайт окончательно снес башку. Задача уровня детского сада, но ты так гордишься, что кое как со скрипом осилил DispatcherSynchronizationContext.
...
Рейтинг: 0 / 0
выбор IoC
    #38476206
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ1. Мне нужен диспоуз после GetData. Где решение?
2. Я уточнил - это WPF, паттерн MVVM. Это не MVC и не MVP. Тут вью-модель может обращаться к сервисам, тут есть dual mode байдинги, тут много что есть. MVC этого и не снилось. Ну ладно, это всё философия.

Где решение???

то о чём ты говоришь, называется Unit Of Work.

пжалста:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class EmployeesViewModel : ViewModelBase
{
    private IWindowService WinService;

    public EmployeesViewModel(IWindowService windowService, Owned<IDataContext> context)
    {
        WinService = windowService;        
///         Context = context;  /// -- Нахуа тогда вот это нужно, если ты его сразу диспозишь???
        
        context.Value.GetData()... // обращение к сервису, что-то делаем
        context.Dispose(); // OK
    }
}



Owned<T> -- это Unit Of Work контейнер. говорит как бы само за себя.

можно ещё круче, генерация и уничтожение экземпляров под управлением DI, на лету:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
interface IMessageHandler
{
    void Handle(Message message);
}

class MessagePump
{
    Func<Owned<IMessageHandler>> _handlerFactory;
    
    public MessagePump(Func<Owned<IMessageHandler>> handlerFactory)
    {
        _handlerFactory = handlerFactory;
    }
    
    public void Go()
    {
        while(true)
        {
            var message = NextMessage();
            
            using (var handler = _handlerFactory())
            {
                handler.Value.Handle(message);
            }
        } 
    }
}



Какие-проблемы-то? я конечно склоняюсь к тому, что архитектурка тобою приведённая довольно таки хреновая, ибо что-то осмысленное в конструкторе делать -- моветон. нельзя. такие вещи надо поручать фабрикам и (в случае MVVM), диспетчеру. но никак не жётко хардкодить.

Ты сам себе противоречишь. Сначала никаких Dispose из ViewModel, то теперь отжигаешь. Как понимать?

В чем тут хреновая архитектура, можешь внятно объяснить? Сначала ты пишешь, что нельзя вызывать сервисы из вью модели (по неопытности). Потом ты пишешь откровенный диспоуз в ней. Потом ты пишешь какую-то чушь про хреновую архитектуру. Извини, но у меня складывается ощущение, что ты полный ноль в обсуждаемой теме. Кроме веб приложений на мвц далече не сувался.
...
Рейтинг: 0 / 0
выбор IoC
    #38476208
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ,

и ещё

Код: c#
1.
private IWindowService WinService;



решарпера на тебя нет!

Не вижу повода для паники. Или опять вбитый гвоздями шаблон не дает покоя?
...
Рейтинг: 0 / 0
выбор IoC
    #38476234
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хвост, вот тебе еще железобетонный пример, когда нужно передавать контейнер в класс, а не сервис.

Всё та же вью модель для WPF приложения.

1. При открытии окна идет обращение к сервису, получаем данные (переменная history), диспоузим сервис, наполняем наблюдаемую коллекцию (байдинг на дата грид в XAML).

2. Через какое-то время мы из этого окна захотим получить отчет, то есть опять обратиться к сервису, который мы ранее убили (команда OpenReportCommand, байдинг на клик кнопки). Но так как у нас в конструктор ходит контейнер, мы без проблем снова резолвим сервис данных, вызываем метод GetEmployees, диспоузим сервис. Передаем готовые данные в метод формирования отчета.

3. Когда я дождусь от тебя валидного кода по уничтожению сервиса по требованию? Ты такую элементарную задачу уже третьти сутки не можешь решить

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
public class MainViewModel: ViewModelBase
{
    private IUnityContainer Container;

    public MainViewModel(IUnityContainer container)
    {
        Container = container;

        var ctx = Container.Resolve<IDataContext>();
        var history = ctx.GetHistory();
        ctx.Dispose();

        History = new ObservableCollection<History>(history);
    }

    public IIdentity Identity { get { return WindowsIdentity.GetCurrent(); } }

    private ObservableCollection<History> _history;
    public ObservableCollection<History> History
    {
        get
        {
            return _history;
        }
        set
        {
            _history = value;
            OnPropertyChanged(() => History);
        }
    }

    private ICommand _openReportCommand;
    public ICommand OpenReportCommand
    {
        get
        {
            if (_openReportCommand == null)
            {
                _openReportCommand = new RelayCommand(action => 
                {
                    var ctx = Container.Resolve<IDataContext>();
                    var employees = ctx.GetEmployees();
                    ctx.Dispose();

                    Container.Resolve<IWindowService>().OpenReport(employees); 
                });
            }

            return _openReportCommand;
        }
    }       
}
...
Рейтинг: 0 / 0
выбор IoC
    #38476236
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тот гавнокод, что ты привёл со своим "MessagePump" не поддается даже здравой логике. Это полный алес капут.
...
Рейтинг: 0 / 0
выбор IoC
    #38476301
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Надо правильные контейнеры использовать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class MainViewModel : ViewModelBase
{
    public Func<IDataContext> DataContextProvider { get; set; }    

    public MainViewModel()
    {
        History history;
        using(var ctx = DataContextProvider())
            history = ctx.GetHistory();        

        History = new ObservableCollection<History>(history);
    }
}
...
Рейтинг: 0 / 0
выбор IoC
    #38476303
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТы сам себе противоречишь. Сначала никаких Dispose из ViewModel, то теперь отжигаешь. Как понимать?

а никаких Dispose контекста и нет. если ты это не доходит. то всё. алес. умываю руки.
...
Рейтинг: 0 / 0
выбор IoC
    #38476306
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПотом ты пишешь откровенный диспоуз в ней. Потом ты пишешь какую-то чушь про хреновую архитектуру. Извини, но у меня складывается ощущение, что ты полный ноль в обсуждаемой теме. Кроме веб приложений на мвц далече не сувался.

мдя... чувак. можно закрывать тему. ты свой уровень прекрасно показал. не можешь различить диспоуз сервиса и диспоуз UOW (который всего лишь указывает DI контейнеру, что Owner больше не нужен).

не ебай мне мозги. давай заканчивать бесполезный треп. я вижу что ты окончательно не одупляешься.
...
Рейтинг: 0 / 0
выбор IoC
    #38476308
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА тот гавнокод, что ты привёл со своим "MessagePump" не поддается даже здравой логике. Это полный алес капут.

дооооооооооо. напишу авторам autofac что они говнокодеры. пусть придут поучатся у великого МСУ.

ну и посмешил же ты меня. не собираюсь больше убивать на тебя время. ты не прошибаемый. лишь бы не признать что не прав. да оставайся при своём мнении. мне как-то уже пофиг.
...
Рейтинг: 0 / 0
выбор IoC
    #38476312
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
public class MainViewModel: ViewModelBase
{
    private IUnityContainer Container;

    public MainViewModel(IUnityContainer container)



особенно доставило. МСУ. ты и правда ВОТ ТАК ПИШЕШЬ? ЭТО куски кода из реального проекта?
...
Рейтинг: 0 / 0
выбор IoC
    #38476315
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУСначала ты пишешь, что нельзя вызывать сервисы из вью модели (по неопытности).

вообщето только по неопытность можно засунуть добычу данных из сервиса в конструкторе. простительно первокласснику. но не опытному программисту. надо пересмотреть его квалификации и спросит, хуле он в программировании забыл.
...
Рейтинг: 0 / 0
выбор IoC
    #38476325
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУТы сам себе противоречишь. Сначала никаких Dispose из ViewModel, то теперь отжигаешь. Как понимать?

а никаких Dispose контекста и нет. если ты это не доходит. то всё. алес. умываю руки.

Как нет, если есть? 15183035

Ты умываешь руки, потому что банальную задачу уже третьи сутки решить не можешь? Что ж, хорошая стратегия: мыть руки, сливая.

hVosttМСУПотом ты пишешь откровенный диспоуз в ней. Потом ты пишешь какую-то чушь про хреновую архитектуру. Извини, но у меня складывается ощущение, что ты полный ноль в обсуждаемой теме. Кроме веб приложений на мвц далече не сувался.

мдя... чувак. можно закрывать тему. ты свой уровень прекрасно показал. не можешь различить диспоуз сервиса и диспоуз UOW (который всего лишь указывает DI контейнеру, что Owner больше не нужен).

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

Хвост, твой уровень и так всем понятен. Понахватался вершков с хабров и веришь в свой шаблон, молясь на него как на икону. А задача не решена. Пытаешься всё больше и больше нагрузить свой гавнокод левыми педалями, а не выходит каменный цветок. Где решение? Нету решения. Потому что узко смотришь на мир из-под призмы mvc. Твои студенческие взгляды - юношеский максимализм на пустом месте.
...
Рейтинг: 0 / 0
выбор IoC
    #38476329
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУА тот гавнокод, что ты привёл со своим "MessagePump" не поддается даже здравой логике. Это полный алес капут.

дооооооооооо. напишу авторам autofac что они говнокодеры. пусть придут поучатся у великого МСУ.

ну и посмешил же ты меня. не собираюсь больше убивать на тебя время. ты не прошибаемый. лишь бы не признать что не прав. да оставайся при своём мнении. мне как-то уже пофиг.

Да, напиши еще авторам Unity, пусть поучатся у твоих автофаковых авторов. Где конечно решение? Тебе не надоело скакать как белка в колесе?
...
Рейтинг: 0 / 0
выбор IoC
    #38476330
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Код: c#
1.
2.
3.
4.
5.
public class MainViewModel: ViewModelBase
{
    private IUnityContainer Container;

    public MainViewModel(IUnityContainer container)



особенно доставило. МСУ. ты и правда ВОТ ТАК ПИШЕШЬ? ЭТО куски кода из реального проекта?

Да, я так пишу. Что тебя смущает? Очередной шаблон в башке застрял?
...
Рейтинг: 0 / 0
выбор IoC
    #38476332
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУСначала ты пишешь, что нельзя вызывать сервисы из вью модели (по неопытности).

вообщето только по неопытность можно засунуть добычу данных из сервиса в конструкторе. простительно первокласснику. но не опытному программисту. надо пересмотреть его квалификации и спросит, хуле он в программировании забыл.

Одно слюнометание, а по делу ноль. Конструктор - это какой-то запрещенный метод? Или ты боишься конструкторов? А задача так и не решена...
...
Рейтинг: 0 / 0
25 сообщений из 286, страница 11 из 12
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / выбор IoC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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