powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / IoC-контейнер для использования с MVVM: где хранить?
97 сообщений из 97, показаны все 4 страниц
IoC-контейнер для использования с MVVM: где хранить?
    #38310578
IoC Lacks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вот вопрос. Допустим, я для своих целей использую Ninject, конструкторы/свойства/методы максимально отвязаны от конкретных реализаций, и оперируют интерфейсами. Соответственно, для обращения к ним нужно отрезолвить нужные зависимости, и передать нужным образом. Для резолвинга нужен экземпляр IoC-контейнера. Лучшие собаководы вроде как рекомендуют инжектить зависимости в нужном наборе фабрик в нужных местах (а не в точке входа в приложение всем скопом), далее использовать фабрики. Тут начинаются вопросы:
1) мы начнем обращаться к конкретным реализациям фабрик? Но получается же, что DI, таким образом, нарушается - в точке вызова мы оперируем с конкретной реализацией?
2) допустим, мы заинжектили и фабрики. Но тогда в точках обращения к фабрикам нам опять нужна ссылка на контейнер.
И где этот контейнер хранить? Сделать его синглтоном и чем-то типа ServiceLocator? Опять получаем зависимость от конкретной реализации, причем сквозную по всему проекту.
Наконец, причем здесь MVVM. Если речь идет о невизуальных классах с узкой спецификой, то мы можем их инжектить максимально близко к точке использования. А вот если, например, нам надо заинжектить что-то типа IMessageBoxService, используемый во всех моделях приложения? Инжектить его в конструкторе каждой модели - не видно особого смысла, т.к. у сервиса нет состояния, и он один абсолютно одинаковый для всех. А если не инжектить в каждой модели - то надо инжектить один раз на всё приложение. Опять упираемся во что-то типа сервис-локатора-синглтона. И что тут делать?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310598
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksА вот если, например, нам надо заинжектить что-то типа IMessageBoxService, используемый во всех моделях приложения? Инжектить его в конструкторе каждой модели - не видно особого смысла, т.к. у сервиса нет состояния, и он один абсолютно одинаковый для всех.Сегодня нет состояния, завтра может появиться. Сегодня он синглетон, завтра он ThreadStatic-синглетон, послезавтра ещё что... Но это маразм конечно, основанный на неуверенности в завтрашнем дне.

зы: У нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310599
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksИнжектить его в конструкторе каждой модели - не видно особого смысла, т.к. у сервиса нет состояния, и он один абсолютно одинаковый для всех. А если не инжектить в каждой модели - то надо инжектить один раз на всё приложение.Инжектить можно через публичные свойства, вынесенные в базовый для всех вьюмоделей класс.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310643
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кзы: У нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...
+100
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310747
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КУ нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...
У вас никогда не было автоматизированного тестирования. :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310754
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorАлексей КУ нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...
У вас никогда не было автоматизированного тестирования. :)
Тестировать мессадж бокс? Не смеши :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310768
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC Lacks,

Вы не понимаете принцип Dependency Inversion, и соответсвенно технику применения Dependecy Injection контейнеров. Всё о чём вы пишите - сплошной анти-паттерн ServiceLocator .
Какую зависимость какой компонент получит - надо решать на уровне конфигурации контейнера, а не в классах приложения. Абстрактные фабрики при наличии контейнера - ненужная вещь. Контейнер и так классная фабрика, сделает что надо, сколько надо, и когда надо.

Для вашего IMessageBoxService можно использовать то, что Seamann назыает Ambient Contex (хотя я бы всё равно инжектил). Только не забудьте его инициализировать его при старте приложения, и предусмотреть возможность замены.

Чтобы привести мысли в правильное русло раздобудьте себе Dependency Injection in .NET . Там кратко и по делу.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310822
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorМСУЧего вы там во вьюмоделе/контроллере/презентере тестировать собрались? Тестировать модель надо, а она далека от MessageBoxService.

Не надо мешать логику с UI, тогда костыли не понадобятся. Тестировщики-любители блин...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310876
IoC Lacks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так я же и пишу, что стараюсь уйти от вариантов с ServiceLocator'ом. Основной вопрос сводился к следующему: допустим, мы определили зависимости для компонентов в конфигурации контейнера. Теперь в нужном месте нам по зависимости нужен экземпляр компонента. У кого его получить? у контейнера? А откуда получить контейнер? Каждый раз его инстанциировать заново?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310882
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksТак я же и пишу, что стараюсь уйти от вариантов с ServiceLocator'ом. Основной вопрос сводился к следующему: допустим, мы определили зависимости для компонентов в конфигурации контейнера. Теперь в нужном месте нам по зависимости нужен экземпляр компонента. У кого его получить? у контейнера? А откуда получить контейнер? Каждый раз его инстанциировать заново?
Ну, видимо, контейнер создаётся при старте приложения. "Корневой" сервис создаётся через явное обращение к этому контейнеру. А дальше всё через иньекции.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310904
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksА откуда получить контейнер? Каждый раз его инстанциировать заново?
Это же статика, экземпляр контейнера один.

Код: c#
1.
var service = DependencyResolver.Current.GetService<IDataService>()
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310957
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ке надо мешать логику с UI, тогда костыли не понадобятся. Тестировщики-любители блин...
А логику представления тестировать не надо например? Скажем есть у нас кнопка "DeleteFoo" у которой свойство Enabled прибиндено к свойству модели MVVM DeleteEnabled. Свойство должно быть true, только если юзер выбрал объект, и этот объект не удалён. При вызове delete спросить уверен ли юзер в своём желании удалять. Если не уверен - не удалять.

Это всё логика, которой не место в бизнес слое. Ее можно и полезно тестировать.

Тестировщик-профессионал, блин. :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310982
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorА логику представления тестировать не надо например? Скажем есть у нас кнопка "DeleteFoo" у которой свойство Enabled прибиндено к свойству модели MVVM DeleteEnabled. Свойство должно быть true, только если юзер выбрал объект, и этот объект не удалён. При вызове delete спросить уверен ли юзер в своём желании удалять. Если не уверен - не удалять.

Это всё логика, которой не место в бизнес слое. Ее можно и полезно тестировать.Тестировать "это" - маразм.
SolYUtorТестировщик-профессионал, блин. :)Да. :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310988
IoC Lacks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУЭто же статика, экземпляр контейнера один.

Код: c#
1.
var service = DependencyResolver.Current.GetService<IDataService>()


В случае с упомянутым Ninject пример использования выглядит примерно как
Код: c#
1.
2.
3.
4.
IKernel kernel = new StandardKernel();
kernel.Bind<ISomeClass>().To<SomeClass>();

SomeClass sc = kernel.Get<ISomeClass>();


В случае, например, с Castle Windsor, код немногим отличается:
Код: c#
1.
2.
3.
4.
container = new WindsorContainer();
container.Install(...);

var start = container.Resolve<IShell>();


- контейнер инстанциируется явным образом. Т.е. для того, чтобы им воспользоваться, мы должны либо поместить его внутрь синглтона/статического класса - получаем ServiceLocator, либо хранить где-то в корне приложения ссылку, и постоянно передавать её по цепочке в конструкторы. Ни то, ни другое у меня как-то не вызывают оптимизма.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38310993
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksТ.е. для того, чтобы им воспользоваться, мы должны либо поместить его внутрь синглтона/статического класса - получаем ServiceLocator, либо хранить где-то в корне приложения ссылку, и постоянно передавать её по цепочке в конструкторы. Ни то, ни другое у меня как-то не вызывают оптимизма.Есть смысл ещё раз прочитать мои ответы.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311034
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу, видимо, контейнер создаётся при старте приложения. "Корневой" сервис создаётся через явное обращение к этому контейнеру. А дальше всё через иньекции.
Алексей КЕсть смысл ещё раз прочитать мои ответы.

Редкий случай, когда я согласен с Алексеем.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311044
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC Lacksконтейнер инстанциируется явным образом
И в чем проблема?

IoC LacksТ.е. для того, чтобы им воспользоваться, мы должны либо поместить его внутрь синглтона/статического класса - получаем ServiceLocator
Глупости.

1. Синглтон не обязан быть сервис локатором.
2. Причем тут синглтон? Он не панацея.
3. Причем тут статический класс? Класс не обязан быть статическим, речь о статическом методе и только.
4. Достаточно иметь статический метод, который будет отдавать отрезолвленный интерфейс.

IoC LacksНи то, ни другое у меня как-то не вызывают оптимизма.
У тебя каша в голове.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311100
IoC Lacks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУУ тебя каша в голове.
Касательно обсуждаемой темы - не спорю. Иначе зачем мне было бы эту тему заводить? Я и рассчитываю с помощью этой темы несколько разобраться в обсуждаемом.
Итак, насколько я понял, мне намекают на что-то типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DependencyResolver
{
  static readonly IKernel сurrent = new StandardKernel();
  static DependencyResolver()
  {
    current.Bind<ISomeClass>().To<SomeClass>();
    .....
  }
  
  public static IKernel Current
  {
    get { return current; }
  }
}


и далее в коде
Код: c#
1.
var someClass = DependecyResolver.Current.Get<ISomeClass>();


так?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311142
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC Lacksи далее в коде при старте приложения
Код: c#
1.
var someClass = DependecyResolver.Current.Get<ISomeClass>();

Добавил.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311170
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC Lacksтак?
Типа того.

Вот код штатного DI для ASP.NET MVC

Код: c#
1.
2.
3.
4.
5.
6.
public interface IDependencyResolver
{
    // Methods
    object GetService(Type serviceType);
    IEnumerable<object> GetServices(Type serviceType);
}



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private sealed class CacheDependencyResolver : IDependencyResolver
{
    // Fields
    private readonly ConcurrentDictionary<Type, object> _cache;
    private readonly ConcurrentDictionary<Type, IEnumerable<object>> _cacheMultiple;
    private readonly IDependencyResolver _resolver;

    // Methods
    public CacheDependencyResolver(IDependencyResolver resolver);
    public object GetService(Type serviceType);
    public IEnumerable<object> GetServices(Type serviceType);
}



DependencyResolver
Код: 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.
53.
54.
55.
56.
57.
public class DependencyResolver
{
    // Fields
    private IDependencyResolver _current;
    private CacheDependencyResolver _currentCache;
    private static DependencyResolver _instance;

    // Methods
    static DependencyResolver();
    public DependencyResolver();
    public void InnerSetResolver(object commonServiceLocator);
    public void InnerSetResolver(IDependencyResolver resolver);
    public void InnerSetResolver(Func<Type, object> getService, Func<Type, IEnumerable<object>> getServices);
    public static void SetResolver(object commonServiceLocator);
    public static void SetResolver(IDependencyResolver resolver);
    public static void SetResolver(Func<Type, object> getService, Func<Type, IEnumerable<object>> getServices);

    // Properties
    public static IDependencyResolver Current { get; }
    internal static IDependencyResolver CurrentCache { get; }
    public IDependencyResolver InnerCurrent { get; }
    internal IDependencyResolver InnerCurrentCache { get; }

    // Nested Types
    private sealed class CacheDependencyResolver : IDependencyResolver
    {
        // Fields
        private readonly ConcurrentDictionary<Type, object> _cache;
        private readonly ConcurrentDictionary<Type, IEnumerable<object>> _cacheMultiple;
        private readonly IDependencyResolver _resolver;

        // Methods
        public CacheDependencyResolver(IDependencyResolver resolver);
        public object GetService(Type serviceType);
        public IEnumerable<object> GetServices(Type serviceType);
    }

    private class DefaultDependencyResolver : IDependencyResolver
    {
        // Methods
        public DefaultDependencyResolver();
        public object GetService(Type serviceType);
        public IEnumerable<object> GetServices(Type serviceType);
    }

    private class DelegateBasedDependencyResolver : IDependencyResolver
    {
        // Fields
        private Func<Type, object> _getService;
        private Func<Type, IEnumerable<object>> _getServices;

        // Methods
        public DelegateBasedDependencyResolver(Func<Type, object> getService, Func<Type, IEnumerable<object>> getServices);
        public object GetService(Type type);
        public IEnumerable<object> GetServices(Type type);
    }
}

...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311201
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IoC LacksМСУУ тебя каша в голове.
Касательно обсуждаемой темы - не спорю. Иначе зачем мне было бы эту тему заводить? Я и рассчитываю с помощью этой темы несколько разобраться в обсуждаемом.
Итак, насколько я понял, мне намекают на что-то типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DependencyResolver
{
  static readonly IKernel сurrent = new StandardKernel();
  static DependencyResolver()
  {
    current.Bind<ISomeClass>().To<SomeClass>();
    .....
  }
  
  public static IKernel Current
  {
    get { return current; }
  }
}


и далее в коде
Код: c#
1.
var someClass = DependecyResolver.Current.Get<ISomeClass>();


так?

Эта унылая шняго из ASP.net mvc создана только для таких как MCУ, который в глаза не видел нормальные контейнеры.
Их применение должно быть изначально заложено в архитектуру, почитай доки по prism. В них достаточно внятно объяснено для чего они нужны и что для этого должно быть.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311245
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЭта унылая шняго из ASP.net mvc создана только для таких как MCУ, который в глаза не видел нормальные контейнеры.
Это замечательный возможность использовать штатный mvc-шный резолвер. А те, вроде тебя, у кого не хватает мозгов это понять, могут вещать дальше о правильный контейнерах и убитой кастрированной поделке prism.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311339
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

IDependencyResolver в MVC - это ошибка. Правильный путь - реализовывать IControllerFactory.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311352
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorМСУ, IDependencyResolver в MVC - это ошибка.
С чего это?

SolYUtorПравильный путь - реализовывать IControllerFactory.
Путь тоже хороший, не спорю.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311380
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

контейнеры склонны контролировать жизненный цикл созданных ими объектов. Во многих случаях требуется явно указать контейнеру, когда объект можно уничтожать. Register-Resolve-Release цикл. Так вот, DependencyResolver не предоставляет способа "отпускать" объекты.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311391
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorМСУ,

контейнеры склонны контролировать жизненный цикл созданных ими объектов. Во многих случаях требуется явно указать контейнеру, когда объект можно уничтожать. Register-Resolve-Release цикл. Так вот, DependencyResolver не предоставляет способа "отпускать" объекты.Всегда стараюсь управлять временем жизни через using. Пока получается. :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311440
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВсегда стараюсь управлять временем жизни через using. Пока получается. :-)
Без контейнера получается. С контейнером будет утечка памяти.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311442
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorконтейнеры склонны контролировать жизненный цикл созданных ими объектов.
Я в курсе, но мне это не нужно. Я плохой?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311454
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУSolYUtorконтейнеры склонны контролировать жизненный цикл созданных ими объектов.
Я в курсе, но мне это не нужно. Я плохой?
В терминологии MVC мне достаточно такого варианта:

Код: 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.
public class BaseController : Controller
{
    private IDataService _service;
    public IDataService Service
    {
        get
        {
            if (_service == null)
            {
                _service = DependencyResolver.Current.GetService<IDataService>();
            }

            return _service;
        }
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        if (disposing && _service != null)
        {
            _service.Dispose();
        }
    }
}



SolYUtor, объясни, зачем мне тут полновесный DI?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311475
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУSeVaЭта унылая шняго из ASP.net mvc создана только для таких как MCУ, который в глаза не видел нормальные контейнеры.
Это замечательный возможность использовать штатный mvc-шный резолвер. А те, вроде тебя, у кого не хватает мозгов это понять, могут вещать дальше о правильный контейнерах и убитой кастрированной поделке prism.

Штатный резолвер для убогих, натуральный анти-паттерн, который нужно за собой везде таскать или создавать еще один маразм - глобальную ссылку(в mvc - это конфиг, которым ты везде тычешь). Нужен только по одной причине - есть ряд сущностей, которые нужны не всегда(например, упомянутый IMessageBoxService, который необходимо получить только при возникновении ошибки, которая в свою очередь может быть раз в сто лет), чтобы этого не происходило нормальные контейнеры реализуют возможность отложенной инжекции(Lazy в MEF&Unity3.0). Если это есть, то твой резолвер и даром не нать, советы опытных собаководов с фабриками тоже идут лесом.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311492
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaШтатный резолвер для убогих
Штатный резолвер для тех, кому не нужно большее. Этим убогим не понять, всё сложно.
Для более уточненных задач есть штатный IControllerFactory.

SeVaнатуральный анти-паттерн, который нужно за собой везде таскать
Что, куда и зачем нужно таскать? Внятно сформулируй мысль.

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

Я в курсе, но мне это не нужно. Я плохой?
В терминологии MVC мне достаточно такого варианта:

Код: 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.
public class BaseController : Controller
{
    private IDataService _service;
    public IDataService Service
    {
        get
        {
            if (_service == null)
            {
                _service = DependencyResolver.Current.GetService<IDataService>();
            }

            return _service;
        }
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        if (disposing && _service != null)
        {
            _service.Dispose();
        }
    }
}



SolYUtor, объясни, зачем мне тут полновесный DI?

1. Этот говнокод непереносим из-за жесткой ссылки на статик
2. Ты тут недавно поднимал визг, когда Нахлобуч явно диспозил объекты(жалко я был забанен в это время, ReadAllBytes меня тоже очень порадовал). Твой очередной говносовет не прокатит в весьма простых и часто используемых случаях, когда нужно одно соединение с БД, транзакция, etc per Request(таких вариантов вагон и маленькая тележка, но ты об этом не знаешь со своими говнообработчиками в ASP.net). В нормальных контейнерах можно задать зависимости для per Request, объекты будут создаваться и удалятся на автомате.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311499
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУSeVaШтатный резолвер для убогих
Штатный резолвер для тех, кому не нужно большее. Этим убогим не понять, всё сложно.
Для более уточненных задач есть штатный IControllerFactory.

SeVaнатуральный анти-паттерн, который нужно за собой везде таскать
Что, куда и зачем нужно таскать? Внятно сформулируй мысль.

SeVaглобальную ссылку(в mvc - это конфиг, которым ты везде тычешь).
Ты чего там у себя куришь? Какая глобальная ссылка?

Обычная история с твоей тупостью и не пониманием простых вещей.
Попробуй в своем говнокоде обойтись без статиков на твой ресолвер, а потом нам расскажи как ты будешь это делать.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311506
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: 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.
public class BaseController : Controller
{
    private IDataService _service;
    public IDataService Service
    {
        get
        {
            if (_service == null)
            {
                _service = DependencyResolver.Current.GetService<IDataService>();
            }

            return _service;
        }
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        if (disposing && _service != null)
        {
            _service.Dispose();
        }
    }
}

А что там диспозить? Собрался DbConnection или FileStream делать членом класса сервиса? Да и вообще, layer superclass для слоя прикладных сервисов - тупиковый путь развития.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311508
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorАлексей КВсегда стараюсь управлять временем жизни через using. Пока получается. :-)
Без контейнера получается. С контейнером будет утечка памяти.Смотря какой LifetimeManager.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311526
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa1. Этот говнокод непереносим из-за жесткой ссылки на статик
2. Ты тут недавно поднимал визг, когда Нахлобуч явно диспозил объекты(жалко я был забанен в это время, ReadAllBytes меня тоже очень порадовал). Твой очередной говносовет не прокатит в весьма простых и часто используемых случаях, когда нужно одно соединение с БД, транзакция, etc per Request(таких вариантов вагон и маленькая тележка, но ты об этом не знаешь со своими говнообработчиками в ASP.net). В нормальных контейнерах можно задать зависимости для per Request, объекты будут создаваться и удалятся на автомате.
1. Тут нет никаких жестких ссылок на статик. Через штатный DependencyResolver по ленивому свойству я получаю экземпляр, который сидит себе в атрибутах контроллера.
2. Твои говномысли опять размазались по планете и здравой логике не поддаются. Соберись.

SeVaОбычная история с твоей тупостью и не пониманием простых вещей.
Попробуй в своем говнокоде обойтись без статиков на твой ресолвер, а потом нам расскажи как ты будешь это делать.
Стандартная ситуация, когда ты захлебываешься в своем же поносе. Чем тебя так испугал статический резолв?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311534
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА что там диспозить? Собрался DbConnection или FileStream делать членом класса сервиса? Да и вообще, layer superclass для слоя прикладных сервисов - тупиковый путь развития.
Например, DbConnection. Во-вторых, если страшен layer superclass, никто не запрещает тоже самое писать в наследниках. В-третьих, чем layer superclass опасен?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311610
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КА что там диспозить? Собрался DbConnection или FileStream делать членом класса сервиса? Да и вообще, layer superclass для слоя прикладных сервисов - тупиковый путь развития.
Например, DbConnection. Во-вторых, если страшен layer superclass, никто не запрещает тоже самое писать в наследниках. В-третьих, чем layer superclass опасен?Я как-то упёрся в прикладных сервисах в необходимость наследования от нескольких layer superclass. Понадобились одновременно DbContext, описанный примерно как в твоём примере, и ещё одна канитель, описанная в другом суперклассе. Вроде как получилось нарушение SRP со всеми вытекающими. После этого решил больше так не делать.

Далее, если я привяжу управление временем жизни контейнера (и созданных ими сервисов) к WCF (ASP.Net) сессии через IInstanceProvider (или аналогичное), возможна ситуация когда это не устроит.

Не, явное управление временем жизни через using - самое гибкое решение. Всё остальное от лукавого...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var connection = MyConnectionFactory.GetConnection())
        {
    
        }
    }
}


MyConnectionFactory неуправляемых ресурсов не содержит. Его можно инжектировать, можно использовать статический. Зависит от уровня маразма и потребностей.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311636
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ как-то упёрся в прикладных сервисах в необходимость наследования от нескольких layer superclass. Понадобились одновременно DbContext, описанный примерно как в твоём примере, и ещё одна канитель, описанная в другом суперклассе. Вроде как получилось нарушение SRP со всеми вытекающими. После этого решил больше так не делать.
А расшириться через конструктор почему не захотел? :) А в регистрации подпихиваешь готовую ссылку в конструктор.

Алексей КДалее, если я привяжу управление временем жизни контейнера (и созданных ими сервисов) к WCF (ASP.Net) сессии через IInstanceProvider (или аналогичное), возможна ситуация когда это не устроит.
Не, явное управление временем жизни через using - самое гибкое решение. Всё остальное от лукавого...
Ну не скажи. Яркий пример фабрики контроллеров, о которой писал SolYUtor:

Код: 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.
public class HomeController : Controller
{
    private IDataService DataService;

    [DefaultConstructor]
    public HomeController(IDataService service)
    {
        this.DataService = service;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        if (disposing && DataService != null)
        {
            DataService.Dispose();
        }
    }

    public ActionResult Index()
    {
        // Use DataService ...
        return View(model);
    }

    public ActionResult Index2()
    {
        // User DataService...
        return View(model);
    }
}



И никаких юзингов. Честное управление жизнью моих зависимостей.

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

МСУАлексей КДалее, если я привяжу управление временем жизни контейнера (и созданных ими сервисов) к WCF (ASP.Net) сессии через IInstanceProvider (или аналогичное), возможна ситуация когда это не устроит.
Не, явное управление временем жизни через using - самое гибкое решение. Всё остальное от лукавого...
Ну не скажи. Яркий пример фабрики контроллеров, о которой писал SolYUtor:SolYUtorIDependencyResolver в MVC - это ошибка. Правильный путь - реализовывать IControllerFactory.Редкий случай, когда я согласен с SolYUtor.

SolYUtor
Код: 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.
public class HomeController : Controller
{
    private IDataService DataService;

    [DefaultConstructor]
    public HomeController(IDataService service)
    {
        this.DataService = service;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        if (disposing && DataService != null)
        {
            DataService.Dispose();
        }
    }

    public ActionResult Index()
    {
        // Use DataService ...
        return View(model);
    }

    public ActionResult Index2()
    {
        // User DataService...
        return View(model);
    }
}

Это гораздо лучше, нет базового класса, отвечающего за доступ к инфраструктуре. Осталось заменить IDataService на IDataServiceFactory и честно использовать using. :-)

МСУИ никаких юзингов. Честное управление жизнью моих зависимостей.А потом захочется иметь два одновременных коннекта к одной базе и начнутся поиски "кто виноват и что делать". :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311674
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...

Например, DbConnection. Во-вторых, если страшен layer superclass, никто не запрещает тоже самое писать в наследниках. В-третьих, чем layer superclass опасен?Я как-то упёрся в прикладных сервисах в необходимость наследования от нескольких layer superclass. Понадобились одновременно DbContext, описанный примерно как в твоём примере, и ещё одна канитель, описанная в другом суперклассе. Вроде как получилось нарушение SRP со всеми вытекающими. После этого решил больше так не делать.

Далее, если я привяжу управление временем жизни контейнера (и созданных ими сервисов) к WCF (ASP.Net) сессии через IInstanceProvider (или аналогичное), возможна ситуация когда это не устроит.

Не, явное управление временем жизни через using - самое гибкое решение. Всё остальное от лукавого...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var connection = MyConnectionFactory.GetConnection())
        {
    
        }
    }
}


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

На утрированном примере попробую объяснить почему это лажа.
1. MyConnectionFactory - это только лишний класс и усложнение кода на ровном месте, которые никому не нужны.
2. Предположим, что connection нужен для двух repositories и в один прекрасный момент мы решаем заменить их реализацию с ADO на EF, что подребует DBContext вместо Connection и нужно будет лопатить код, а с di этого ненужно будет делать.

ЗЫ 2Муслима, твои очередные брызги даже читать не буду, ничего там кроме говна не будет.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311687
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaНа утрированном примере попробую объяснить почему это лажа.
1. MyConnectionFactory - это только лишний класс и усложнение кода на ровном месте, которые никому не нужны.Предположим.

SeVa2. Предположим, что connection нужен для двух repositoriesВнутри фабрики будет применён ThreadStatic.

SeVaи в один прекрасный момент мы решаем заменить их реализацию с ADO на EF, что подребует DBContext вместо Connection и нужно будет лопатить кодКакая-то дикая ситуация, но не придётся, потому что "это" между методами/классами таскаться не будет. См выше про ThreadStatic.

SeVaа с di этого ненужно будет делать.Верю. :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311724
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaНа утрированном примере попробую объяснить почему это лажа.
1. MyConnectionFactory - это только лишний класс и усложнение кода на ровном месте, которые никому не нужны.Предположим.

SeVa2. Предположим, что connection нужен для двух repositoriesВнутри фабрики будет применён ThreadStatic.

SeVaи в один прекрасный момент мы решаем заменить их реализацию с ADO на EF, что подребует DBContext вместо Connection и нужно будет лопатить кодКакая-то дикая ситуация, но не придётся, потому что "это" между методами/классами таскаться не будет. См выше про ThreadStatic.

SeVaа с di этого ненужно будет делать.Верю. :-)

С await твои ThreadStatic из пещер идут лесом.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311727
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaС await твои ThreadStatic из пещер идут лесом.Это да. Но нужен ли он на сервере?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311816
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaС await твои ThreadStatic из пещер идут лесом.Это да. Но нужен ли он на сервере?

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

На клиенте заморочек с асинхронностями хватает. А на сервере часто непростая логика. Если к ней добавить ещё асинхронностей - вообще жесть получится...

Попутно вопрос. Как при всех этих асинхронностях работает OperationContext в WCF? Он вроде как тоже на ThreadStatic построен?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311854
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПопутно вопрос. Как при всех этих асинхронностях работает OperationContext в WCF? Он вроде как тоже на ThreadStatic построен?Как и предполагалось, для OperationContext + await таки нужен костыль .
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38311865
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaпока идут запросы в БД, внешние сервисы и тд, треды не расходуются,Я в курсе.
SeVaполучается совсем другая нагрузочная способность.А оно того стоит? Может проще (дешевле? надёжнее?) горизонтально масштабировать сервера приложений?

На клиенте заморочек с асинхронностями хватает. А на сервере часто непростая логика. Если к ней добавить ещё асинхронностей - вообще жесть получится...

Попутно вопрос. Как при всех этих асинхронностях работает OperationContext в WCF? Он вроде как тоже на ThreadStatic построен?

Полная жесть - мультики с OperationContext. Для чего тебе это было нужно?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312061
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SeVa]Алексей КПолная жесть - мультики с OperationContext.Да.
SeVaДля чего тебе это было нужно?Читай внимательнее. Мне это не было нужно. И, надеюсь, не будет. Любопытство, не более...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312163
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПобоялся плодить бесконечное количество конструкторов. :-)
Два конструктора это бесконечность? :) Вообще да, береги конструкторы с молоду (с)

Алексей КА потом захочется иметь два одновременных коннекта к одной базе и начнутся поиски "кто виноват и что делать". :-)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class HomeController : Controller
{
    private IDataService DataService;
    private IDataService2 DataService2;

    [DefaultConstructor]
    public HomeController(IDataService service, IDataService2 service2)
    {
        this.DataService = service;
        this.DataService2 = service2;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        if (disposing)
        {
            DataService.Dispose();
            DataService2.Dispose();
        }
    }
}



Зло? )

P.S. Долбосева, даже не хочу что-то тебе доказывать. Кроме очередного слюновыделения и какого-то бреда про статику от тебя нечего ожидать.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312216
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДва конструктора это бесконечность? :)Ещё не бесконечность, но тренд настораживает. :-)
МСУАлексей КА потом захочется иметь два одновременных коннекта к одной базе и начнутся поиски "кто виноват и что делать". :-)
Зло? )Ладно, можно. Но всё равно не нравится. :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312223
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕщё не бесконечность, но тренд настораживает. :-)
Согласен, очень опасно

Алексей КЛадно, можно. Но всё равно не нравится. :-)
Да что ж такое... :)

IDependencyResolver не нравится, IControllerFactory не нравится... Может, дельфи? )
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312370
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КАлексей КПопутно вопрос. Как при всех этих асинхронностях работает OperationContext в WCF? Он вроде как тоже на ThreadStatic построен?Как и предполагалось, для OperationContext + await таки нужен костыль .TransactionScope с await тоже поди не работает? Так что, SeVa , от твоих асинхронностей на сервере больше вреда чем пользы!
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312374
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДа что ж такое... :)Доверие надо заслужить.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312389
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЛучше скажи, как тебе такой костыль? Будем DependentTransaction инжектировать? Или не поможет? :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312411
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУЛучше скажи, как тебе такой костыль? Будем DependentTransaction инжектировать? Или не поможет? :-)
Как на счет в рамках общего TransactionScope покрутиться через PLINQ (AsParallel.ForAll) и через клонирование транзакции получить честный DependentTransaction?

Код: c#
1.
var dt = transaction.DependentClone(DependentCloneOption.RollbackIfNotComplete);
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312415
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КАлексей Кпропущено...
Как и предполагалось, для OperationContext + await таки нужен костыль .TransactionScope с await тоже поди не работает? Так что, SeVa , от твоих асинхронностей на сервере больше вреда чем пользы!


Какой ужас!!! С await даже простой lock не работает, но только это не проблема.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312419
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaКакой ужас!!! С await даже простой lock не работает, но только это не проблема.
Приехали... А не ты ли совсем недавно верещал во всё горло, что "lock - это зло"?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312423
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var connection = MyConnectionFactory.GetConnection())
        {
    
        }
    }
}



Но в идеале за такой код, конечно, нужно расстреливать без суда и следствия... :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312435
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей К
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var connection = MyConnectionFactory.GetConnection())
        {
    
        }
    }
}



Но в идеале за такой код, конечно, нужно расстреливать без суда и следствия... :)Да. В идеале оно выглядит примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var scope = MyConnectionFactory.GetConnectionScope())
        {
            var connection = scope.Content;
        }
    }
}
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312437
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaКакой ужас!!! С await даже простой lock не работает, но только это не проблема.Я тебе про ThreadStatic, ты мне про lock. Где логика?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312446
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Лучше скажи, как тебе такой костыль? Будем DependentTransaction инжектировать? Или не поможет? :-)
Как на счет в рамках общего TransactionScope покрутиться через PLINQ (AsParallel.ForAll) и через клонирование транзакции получить честный DependentTransaction?
Код: c#
1.
var dt = transaction.DependentClone(DependentCloneOption.RollbackIfNotComplete);

Ну тут-то понятно ради чего эти пляски.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312476
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУДа. В идеале оно выглядит примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class MyService
{
    public void Do()
    {
        using(var scope = MyConnectionFactory.GetConnectionScope())
        {
            var connection = scope.Content;
        }
    }
}


А почему бы не инжектировать в MyService через конструктор заранее созданный и настроенный коннект со скоупом? :)

Ааа, я ж забыл... Тренд из миллиона конструкторов.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312518
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaКакой ужас!!! С await даже простой lock не работает, но только это не проблема.Я тебе про ThreadStatic, ты мне про lock. Где логика?

ЛОгика простая - другая модель требует других подходов, в которых эту банку червями(ThreadStatic) нужно выбросить на свалку.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312540
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА почему бы не инжектировать в MyService через конструктор заранее созданный и настроенный коннект со скоупом? :)Время жизни соединения с БД и время жизни сессии могут отличаться. Говорил вроде...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312547
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЛогика простая - другая модель требует других подходов.А они есть, эти костыли новые подходы под новую модель, чтобы внедрять её повсеместно?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312570
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУА почему бы не инжектировать в MyService через конструктор заранее созданный и настроенный коннект со скоупом? :)Время жизни соединения с БД и время жизни сессии могут отличаться. Говорил вроде...
"Сессии" чего?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312578
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Время жизни соединения с БД и время жизни сессии могут отличаться. Говорил вроде...
"Сессии" чего?AspNet, WCF и т. п.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312644
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУ"Сессии" чего?AspNet, WCF и т. п.
1. Уважаемый, а чего это ты начал так печься об асп.нет? :) Напоминаю, что в вебе реквесты с респонзами должны быть максимально короткие и все длительные операции нужно выносить в отдельную песочницу (отложенное выполнение).
2. WCF. Тоже самое и тут. Когда продолжительность сессии превышает продолжительность соединения с БД, это уже не в какие ворота не лезет :) Напомню, что по умолчанию время ASP.NET сессии (её тоже можно активировать в WCF при HTTP транспорте) пол-часа.

Не убедил :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312672
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaЛогика простая - другая модель требует других подходов.А они есть, эти костыли новые подходы под новую модель, чтобы внедрять её повсеместно?

Костыли, если есть, то только в мозгах и у вас в РЖД. Монополисту не нужно напрягаться и так можно лудить тарифы, а потом тупо накупать серверы, чтобы не мудрствуя лукаво горизонтально масштабироваться.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312682
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
AspNet, WCF и т. п.
1. Уважаемый, а чего это ты начал так печься об асп.нет? :) Напоминаю, что в вебе реквесты с респонзами должны быть максимально короткие и все длительные операции нужно выносить в отдельную песочницу (отложенное выполнение).
2. WCF. Тоже самое и тут. Когда продолжительность сессии превышает продолжительность соединения с БД, это уже не в какие ворота не лезет :) Напомню, что по умолчанию время ASP.NET сессии (её тоже можно активировать в WCF при HTTP транспорте) пол-часа.

Не убедил :)Да я и сам это знаю, но всё равно что-то мешает. Я этим диконтейнерам как-то не доверяю.

YouTube Video
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312703
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КДа я и сам это знаю, но всё равно что-то мешает. Я этим диконтейнерам как-то не доверяю.
Чекам ты можешь не доверять, но доверять DI обязан

P.S. Я против тяжеловесных сторонних DI, которые нахрен не вперлись. Их приплетают лишь бы они были и всё. Маразм. Есть штатные резолверы, фабрики контроллеров, MEF, наконец. А все эти сторонние нинжектограбли с юнитями в топку. Ну только если .NET 2.0 :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312704
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей Кпропущено...
А они есть, эти костыли новые подходы под новую модель, чтобы внедрять её повсеместно?

Костыли, если есть, то только в мозгах и у вас в РЖД. Монополисту не нужно напрягаться и так можно лудить тарифы, а потом тупо накупать серверы, чтобы не мудрствуя лукаво горизонтально масштабироваться.С нищими заказчиками не работаем.

Почём нынче мегабайт оперативы? Вроде как столько по дефолту расходуется под стек потока? Самый доходной сервер нынче имеет на борту 12ГБ ОЗУ и два 6-и ядерных проца, не меньше. Экономия на спичках, не?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312726
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off: программисты ржд разбушеви решили завоевать мир :) 14492123
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312729
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38312877
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaпропущено...


Костыли, если есть, то только в мозгах и у вас в РЖД. Монополисту не нужно напрягаться и так можно лудить тарифы, а потом тупо накупать серверы, чтобы не мудрствуя лукаво горизонтально масштабироваться.С нищими заказчиками не работаем.

Почём нынче мегабайт оперативы? Вроде как столько по дефолту расходуется под стек потока? Самый доходной сервер нынче имеет на борту 12ГБ ОЗУ и два 6-и ядерных проца, не меньше. Экономия на спичках, не?

Ценник у этих спичек будет от 400К рублей в самой простой конфигурации, средненький - 600К. И это без учета стоимости операционки и прочего ПО. А вам их нужно вагонами закупать(что из себя представляют ваши сервисы я знаю)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313510
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей Кпропущено...
С нищими заказчиками не работаем.

Почём нынче мегабайт оперативы? Вроде как столько по дефолту расходуется под стек потока? Самый доходной сервер нынче имеет на борту 12ГБ ОЗУ и два 6-и ядерных проца, не меньше. Экономия на спичках, не?

Ценник у этих спичек будет от 400К рублей в самой простой конфигурации, средненький - 600К.Ты с какой планеты? Или в цену откат уже заложен? За 200К можно собрать нормальный сервер, обслуживающий тучу задач, в том числе и этот несчастный сервис. Мы же не Facebook-2 пишем.

Вот лучше скажи, какая экономия от перехода на async в относительных показателях? Сколько было и во сколько раз упало потребление ОЗУ и ЦПУ? Давай уже нормальные цифры.

SeVaчто из себя представляют ваши сервисы я знаюПоверь, там и без тебя все всё знают, а что толку? :-)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313668
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте лучше обсудим и поймем причины, почему WPF быстрыми шагами идет в то место, где сейчас находится SL.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313763
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДавайте лучше обсудим и поймем причины, почему WPF быстрыми шагами идет в то место, где сейчас находится SL.Никуда он не идёт. Там стагнация.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313772
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНикуда он не идёт.
Балмер же всё сказал про HTML5. Кому нужен убогий XAML? :)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313775
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНикуда он не идёт.
Балмер же всё сказал про HTML5. Кому нужен убогий XAML? :)Балмер - лох. Кто его слушает?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313787
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313792
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, Лёня, не сцать...

http://www.zdnet.com/microsoft-delivers-new-visual-studio-2013-and-net-4-5-1-previews-7000017336/ The new previews also add support for asynchronous debugging (when using VS 2013 on Windows 8.1, not older Windows releases) for C#, VB, JavaScript and C++ developers. .Net 4.5.1 also adds performance improvements for apps running on multicore machines. And more C++11 standards support, including featues like delegating constructors, raw string literals, explicit conversion operators and variadic templates.

Microsoft also has made improvements to the development experience for those using XAML to build Windows Store apps, according to officials. There are "significant" performance improvements for the XAML designers in Visual Studio and Blend, as well as general XAML editing in Visual Studio, with the inclusion of IntelliSense for data binding and resources.

Microsoft also is continuing to add features meant to entice more JavaScript and HTML development for those using Visual Studio to build Windows Store.

At Build this week, Microsoft has slated eight sessions focused on XAML and eight on JavaScript. Microsoft officials have said they plan to try to convey to .Net developers at the show that they still value them and are not trying to favor those building new Metro-Style/Windows Store apps in JavaScript and HTML -- which is the message that many programmers felt Microsoft sent during its last two Build conferences.


Развивается и XAML и JavaScript + HTML. Всё нормально.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313827
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУThe new previews also add support for asynchronous debugging ( when using VS 2013 on Windows 8.1, not older Windows releases )Теперь будем каждый год новый Виндоус ставить?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313844
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТеперь будем каждый год новый Виндоус ставить?
Без asynchronous debugging совсем жизни нету?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313857
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТеперь будем каждый год новый Виндоус ставить?
Без asynchronous debugging совсем жизни нету?Ну всё равно неприятно.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313863
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотел посмотреть исходник асп нет
треуется студия 12, а она под вистой моей что то не запустилась на ноуте
замахали своими "технологиями" каждые полгода тварюги
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313885
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу всё равно неприятно.
Согласен. Хочу купить автомобиль, есть возможность выбора две комплектации. У более дорогой всего лишь одна фишка, которой нет у первой. Это датчик фиксации времени года - если лето, то один раз пикает, если зима, то два раза, осень - три, весна - четыре. Нахер оно нужно - второй вопрос, но с датчиком как-то приятней.

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

Купил более дорогую комплектацию Не надо их оправдывать! Чё за моду взяли, выпустить тормозящую глючную муйню. А её оптимизацию и исправление ошибок считать фишкой следующей версии, требования к окружению которой более жёсткие чем у предыдущей? Уроды... Балмер доиграется сцука...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38313946
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБалмер доиграется сцука...
Вообще, согласен. Ипут моск с технологиями, трендами, осями, кнопками пуск, то риббоны, то метро, то ржд. Сколько можно! Вон жаба столько лет тухнет в своем болоте, зато стабильность и прямолинейность. Ежегодный выпуск новых студий, фреймворков, осей не слабо таки напрягает.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38314509
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaпропущено...


Ценник у этих спичек будет от 400К рублей в самой простой конфигурации, средненький - 600К.Ты с какой планеты? Или в цену откат уже заложен? За 200К можно собрать нормальный сервер, обслуживающий тучу задач, в том числе и этот несчастный сервис. Мы же не Facebook-2 пишем.

Вот лучше скажи, какая экономия от перехода на async в относительных показателях? Сколько было и во сколько раз упало потребление ОЗУ и ЦПУ? Давай уже нормальные цифры.

SeVaчто из себя представляют ваши сервисы я знаюПоверь, там и без тебя все всё знают, а что толку? :-)

У нас меньше, чем за 400К в production нет серверов и 2по 6 ядер начинаются с этой цифры.
async дает минимум на порядок лучшую мастабируемость, те вместо 20-30сервисов и 2-3х серверов достаточно одного.
Если делать все правильно, то сервисы на async весьма неплохо держат нагрузку без существенной потери времени ответа.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38315324
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaasync дает минимум на порядок лучшую мастабируемость, те вместо 20-30сервисов и 2-3х серверов достаточно одного.
Если делать все правильно, то сервисы на async весьма неплохо держат нагрузку без существенной потери времени ответа.Нужны конкретные цифры - сколько было, сколько стало. Неужели не проводили исследование перед тем как перейти на async? Ну, на нет и суда нет...
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38316523
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaasync дает минимум на порядок лучшую мастабируемость, те вместо 20-30сервисов и 2-3х серверов достаточно одного.
Если делать все правильно, то сервисы на async весьма неплохо держат нагрузку без существенной потери времени ответа.Нужны конкретные цифры - сколько было, сколько стало. Неужели не проводили исследование перед тем как перейти на async? Ну, на нет и суда нет...

Наверное, я совсем разучился писать по-русски.
Попробую еще раз. На порядок - это в десять раз меньше копий сервисов, чем в синхронном варианте.
"Без существенной потери времени" означает то, что с ростом нагрузки время ответа не будет увеличиться по экспоненте как у синхронных, а будет расти весьма незначительно.
Тесты, безусловно, предварительно делались(они буквально в несколько строк)
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38316525
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те вам вместо состава нужен будет только один вагон.
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38316567
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей Кпропущено...
Нужны конкретные цифры - сколько было, сколько стало. Неужели не проводили исследование перед тем как перейти на async? Ну, на нет и суда нет...

Наверное, я совсем разучился писать по-русски.
Попробую еще раз. На порядок - это в десять раз меньше копий сервисов, чем в синхронном варианте.
"Без существенной потери времени" означает то, что с ростом нагрузки время ответа не будет увеличиться по экспоненте как у синхронных, а будет расти весьма незначительно.
Тесты, безусловно, предварительно делались(они буквально в несколько строк)Ок
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38396347
jbond81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КIoC LacksА вот если, например, нам надо заинжектить что-то типа IMessageBoxService, используемый во всех моделях приложения? Инжектить его в конструкторе каждой модели - не видно особого смысла, т.к. у сервиса нет состояния, и он один абсолютно одинаковый для всех.Сегодня нет состояния, завтра может появиться. Сегодня он синглетон, завтра он ThreadStatic-синглетон, послезавтра ещё что... Но это маразм конечно, основанный на неуверенности в завтрашнем дне.

зы: У нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...

так нужно ли все MessagexBox-ы в сервисы засовать или достаточно статики?
...
Рейтинг: 0 / 0
IoC-контейнер для использования с MVVM: где хранить?
    #38396367
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jbond81Алексей Кпропущено...
Сегодня нет состояния, завтра может появиться. Сегодня он синглетон, завтра он ThreadStatic-синглетон, послезавтра ещё что... Но это маразм конечно, основанный на неуверенности в завтрашнем дне.

зы: У нас MessageBoxService всегда был обычным статическим классом, дискомфорта никакого...

так нужно ли все MessagexBox-ы в сервисы засовать или достаточно статики?

1) Будете тестировать те места (unittests), где идет вызов MessageBox-ов - засовывайте, не будете - пофиг.
2) Есть в планах реализовать переключатель между стандартными контролами и супер-пупер красивыми сторонними - засовывайте, не будете - пофиг.
...
Рейтинг: 0 / 0
97 сообщений из 97, показаны все 4 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / IoC-контейнер для использования с MVVM: где хранить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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