Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / выбор IoC / 25 сообщений из 286, страница 1 из 12
22.11.2013, 10:10
    #38473821
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
чисто ради интереса кто-нибудь выбирает контейнер исходя из к примеру http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison , или как сложилось и тем пользуется? По идее время отдачи экземпляра не совсем спички так как обращения к контейнеру идут довольно часто.

п.с. сам как то подсел на Autofac и дальше не слезал.
...
Рейтинг: 0 / 0
22.11.2013, 10:23
    #38473836
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
Я за родные DI контейнеры: http://msdn.microsoft.com/en-us/library/dd203101.aspx
Если MVC, то DI контейнер доступен в самом фреймворке, так что ничего дополнительно ставить не нужно.

Всё остальное на помойку.
...
Рейтинг: 0 / 0
22.11.2013, 11:00
    #38473878
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
handmadeFromRu,

Autofac. более логичной имплементации среди DI для .NET пока не встречал. везде что-нибудь, да через Ж. особенно убогий Unity.
...
Рейтинг: 0 / 0
22.11.2013, 11:04
    #38473892
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУЕсли MVC, то DI контейнер доступен в самом фреймворке, так что ничего дополнительно ставить не нужно.

чо за бред ты несёшь? ты поддержку от реализации отличаешь?
...
Рейтинг: 0 / 0
22.11.2013, 11:07
    #38473898
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttчо за бред ты несёшь?
Не бросай слюну по сторонам, чтобы опять стыдно не было. По факту - что конкретно тебя интересует?

hVosttты поддержку от реализации отличаешь?
MVC поддерживает и реализует DI контейнер и фабрику. Что тебя смущает?
...
Рейтинг: 0 / 0
22.11.2013, 11:11
    #38473905
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
handmadeFromRuвремя отдачи экземпляра не совсем спички так как обращения к контейнеру идут довольно часто

в рамках жизненного цикла, повторные запросы возвращают объекты максимально быстро. для критичных мест, можно отдавать фабрику вместо объекта, также можно задать вызов контруктора вручную, также можно отдавать по ключу и по индексу. ещё можно кешировать. в Autofac всё это делается очень гибко.
...
Рейтинг: 0 / 0
22.11.2013, 11:15
    #38473913
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУMVC поддерживает и реализует DI контейнер и фабрику. Что тебя смущает?

смущает конечно. где ты там контейнер увидел? не говори, что DependencyResolver
...
Рейтинг: 0 / 0
22.11.2013, 11:17
    #38473919
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
handmadeFromRuПо идее время отдачи экземпляра не совсем спички так как обращения к контейнеру идут довольно часто.
Если у тебя это критичное место (циклы, многопоточность и т.п.), почему бы вначале не отресолвить объекты, а потом использовать их инстансы в нужном месте? Каждой задаче - свой подход, не всегда в лоб это хорошо.

hVosttсмущает конечно. где ты там контейнер увидел? не говори, что DependencyResolver
Именно DependencyResolver в данном случае является DI контейнером.
...
Рейтинг: 0 / 0
22.11.2013, 11:20
    #38473926
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУИменно DependencyResolver в данном случае является DI контейнером.

это сервис локатор . никакие зависимости MVC не разруливает, потому что никакой контейнер он не реализует. вместо этого он предоставляет точки расширения в виде фабрик, куда легко подставляется нужный контейнер, хоть Unity, хоть Autofac, хоть что-угодно-другое.

признавайся. пил вчера?
...
Рейтинг: 0 / 0
22.11.2013, 11:22
    #38473931
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
давай только без ругани) я просто хотел узнать кто что юзает и почему) пример со ссылкой привел как возможный фактор выбора контейнера для кого то
...
Рейтинг: 0 / 0
22.11.2013, 11:24
    #38473936
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttэто сервис локатор .

Садись - двойка.

DependencyResolverПредоставляет точку регистрации для сопоставителей зависимостей, реализующих IDependencyResolver или интерфейс локатора общей службы IServiceLocator.

Локатор предоставляет точку регистрации для локатора? Мало масляное

hVosttникакие зависимости MVC не разруливает, потому что никакой контейнер он не реализует. вместо этого он предоставляет точки расширения в виде фабрик, куда легко подставляется нужный контейнер, хоть Unity, хоть Autofac, хоть что-угодно-другое.
Он регистрирует и сопоставляет. Это основное, что делает DI. Всякие управления жизнью и прочие фантики - навороты, которые чаще всего просто не нужны. Что-то типа простенького модного SimpleIoC. Учи матчать.


hVosttпризнавайся. пил вчера?
Нет. А ты?
...
Рейтинг: 0 / 0
22.11.2013, 11:24
    #38473937
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
handmadeFromRuдавай только без ругани) я просто хотел узнать кто что юзает и почему) пример со ссылкой привел как возможный фактор выбора контейнера для кого то

если используешь IoC, главное это удобство и логичность использования. если тебе использовать выбранный DI контейнер удобно, значит сделал верный выбор. скорость резолва не существенна. правда, если уже ранее зарезолвенный объект контейнер отдаёт всё равно медленно, то сразу в топку его
...
Рейтинг: 0 / 0
22.11.2013, 11:28
    #38473943
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУСадись - двойка.

млять. главное, держу в руках книжку от Microsoft, где черным по белому написано, что DependencyResolver в ASP.NET MVC это Service Locator, и целая глава накалякана про отличия SL от DI... будешь продолжать возражать?? не позорься уж.

МСУЭто основное, что делает DI

двойешник-колышнек ты. основное отличие DI от SL:

SL — класс запрашивает внешний компонент для получения его зависимостей
DI — класс получает зависимости через конструктор (или открытые свойства)

типа. матчасть дуй учить
...
Рейтинг: 0 / 0
22.11.2013, 11:36
    #38473967
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttМСУСадись - двойка.
млять. главное, держу в руках книжку от Microsoft, где черным по белому написано, что DependencyResolver в ASP.NET MVC это Service Locator, и целая глава накалякана про отличия SL от DI... будешь продолжать возражать?? не позорься уж.
Это раньше его по привычке так называли. Смотри, вот подтверждение:
http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-dependency-injection IDependencyResolver interface replaces the previous IMvcServiceLocator. Implementers of IDependencyResolver must return an instance of the service or a service collection.

На данный момент DependencyResolver может служить полноценным DI контейнером, который и регистрирует и сопоставляет. Кроме того, доступна фабрика DefaultControllerFactory, которую можно инициализировать через ControllerBuilder.Current.SetControllerFactory. Это еще более расширяет IoC функционал, особенно это полезно для инъекции в конструктор контроллера. То есть, сопоставлением в MVC занимается не только DependencyResolver. Всё это полноценные DI контейнеры.

hVosttдвойешник-колышнек ты. основное отличие DI от SL:

SL — класс запрашивает внешний компонент для получения его зависимостей
DI — класс получает зависимости через конструктор (или открытые свойства)

типа. матчасть дуй учить

Бездарность :)

DependencyResolver может и запрашивать и получать. Документацию читал?
...
Рейтинг: 0 / 0
22.11.2013, 11:39
    #38473980
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУDependencyResolver может и запрашивать и получать. Документацию читал?

у меня книжка по MVC 4, на инглише не так уж и давно пришла из Амазона. да читал. и по букве доки там от DI только поддержка . инъекция не выполняется . как можно говорить о Dependency Injection без Injection?

это логика, Спок (с)
...
Рейтинг: 0 / 0
22.11.2013, 11:43
    #38473985
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУ,

ну умора....

1. перейди по ссылке которую ты дал http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-dependency-injection

2. Нажми Ctrl-F и вставь "No parameterless constructor defined for this object"

не дошло? без Unity/Autofac/Ninject ты не получишь никакого DI. даже близко.
...
Рейтинг: 0 / 0
22.11.2013, 11:44
    #38473989
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
Хвост, вот эта инфа из букваря окончательно тебя опустит ниже плинтуса. Я же знаю, как ты не любишь читать доки

The Service Locator Pattern

Идет описание паттерна. А внизу:

Related PatternsThe following patterns are related to the Service Locator pattern:
Dependency Injection. This pattern solves the same problems as the Service Locator pattern, but it uses a different approach.
Inversion of Control. The Service Locator pattern is a specialized version of this pattern. It inverts an application's traditional flow of control. It is the object that is called instead of the caller that controls a process.

А теперь логическая нить, с которой у тебя обычно проблемы.

1. DI и IoC - это родственные паттерны, Service Locator - отдельная песня.
2. DependencyResolver может инжектировать. Следовательно, удовлетворяет первому пункту (паттерн Dependency Injection).
3. DependencyResolver поддерживает инверсию, он может сопоставлять. Следовательно, удовлетворяет второму пункту (паттерн Inversion of Control).

DummyDependencyResolver
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class DummyDependencyResolver : System.Web.Mvc.IDependencyResolver
{
    public object GetService(Type serviceType)
    {
        if (serviceType.Equals(typeof(IDataService)))
        {
            return new SqlDataService();
        }
        return null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    { 
        return Enumerable.Empty<object>();
    }
}



Код: c#
1.
DependencyResolver.SetResolver(new DummyDependencyResolver());



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



Присаживайся. Сегодня опять двойка
...
Рейтинг: 0 / 0
22.11.2013, 11:46
    #38473992
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttМСУ,

ну умора....

1. перейди по ссылке которую ты дал http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-dependency-injection

2. Нажми Ctrl-F и вставь "No parameterless constructor defined for this object"

не дошло? без Unity/Autofac/Ninject ты не получишь никакого DI. даже близко.

Рассмешил

Срочно бежать читать про IControllerFactory. Если лень читать доки, возьми у меня готовый рецепт: http://codearticles.ru/articles/2351

Никаких Unity/Autofac/Ninject, всё работает на штатном функционале MVC. Вот пример параметризации конструктора:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class HomeController : Controller
{
    private IDataService DataService;

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



Опять двойка, сударь?
...
Рейтинг: 0 / 0
22.11.2013, 11:49
    #38473997
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУ,


МСУ1. DI и IoC - это родственные паттерны, Service Locator - отдельная песня.

DI и SL родственные паттерны. в IoC это архитектурный принцип (а не паттерн).

МСУ2. DependencyResolver может инжектировать.

не может и никогда не будет. потому что это Service Locator. в чистом виде.

МСУ3. DependencyResolver поддерживает инверсию, он может сопоставлять.

он не может поддерживать инверсию. это абсурдное по своей сути утверждение.



прекращай дёргать инфу из букваря. и попробуй в чистый проект MVC без юнити и других контейнеров, добавить в любой контроллер зависимость в виде конструктора. в результате будет ошибка выполнения. фабрика не сможет создать экземпляр контроллера, и прямым текстом тебе об этом скажет "иди учи матчасть"
...
Рейтинг: 0 / 0
22.11.2013, 11:52
    #38474007
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУРассмешил

Срочно бежать читать про IControllerFactory. Если лень читать доки, возьми у меня готовый рецепт: http://codearticles.ru/articles/2351

Никаких Unity/Autofac/Ninject, всё работает на штатном функционале MVC. Вот пример параметризации конструктора:

во-первых, это исключительно реализация фабрики, а не DependencyResolver, и она не станет разруливать дочерние зависимости. проверь.
...
Рейтинг: 0 / 0
22.11.2013, 11:55
    #38474013
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttDI и SL родственные паттерны. в IoC это архитектурный принцип (а не паттерн).
Не нужно тут коверкать своим википедийным языком. В доке MS четко написано: Inversion of Control - The Service Locator pattern is a specialized version of this pattern. Принцип, паттерн, подход... Решил позаниматься буквоедством, человек?

hVosttМСУ2. DependencyResolver может инжектировать.
не может и никогда не будет. потому что это Service Locator. в чистом виде.
Лично этот класс не может, но у него есть штатный помощник - IControllerFactory :)

hVosttМСУ3. DependencyResolver поддерживает инверсию, он может сопоставлять.
он не может поддерживать инверсию. это абсурдное по своей сути утверждение.
Resolve - чем тебе не инверсия? В чем обсурдность?

hVosttпрекращай дёргать инфу из букваря. и попробуй в чистый проект MVC без юнити и других контейнеров, добавить в любой контроллер зависимость в виде конструктора. в результате будет ошибка выполнения. фабрика не сможет создать экземпляр контроллера, и прямым текстом тебе об этом скажет "иди учи матчасть"
Я тебе дал ссылку на рецепт. Изучи нативные возможности MVC :)
...
Рейтинг: 0 / 0
22.11.2013, 11:57
    #38474016
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttво-первых, это исключительно реализация фабрики, а не DependencyResolver, и она не станет разруливать дочерние зависимости. проверь.
Слушай, ну тут уже пошло меряние пиписьками. Я тебе изначально сказал, что это не тот богатый функционал, который есть в Unity, автофаках и прочей ипостаси. Ты чем читаешь?
...
Рейтинг: 0 / 0
22.11.2013, 12:03
    #38474031
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
МСУВ доке MS четко написано: Inversion of Control - The Service Locator pattern is a specialized version of this pattern

SL является паттерном, реализующим IoC. всё правильно. только IoC это не паттерн. не может быть паттерна. ты ещё скажи, что "разделяй и властвуй" — тоже паттерн.

МСУЛично этот класс не может, но у него есть штатный помощник - IControllerFactory :)

это тебя заносит... если я в качестве реализации IControllerFactory подсуну класс, размечающий и форматирующий харды, это что получается, IControllerFactory ещё и офигенная утилита для управления дисками?? если ты чего-то туда запихал — свою кастрированную реализацию подобия DI, это не называется нативной поддержкой . иначе, любой человек — это президент в чистом виде, осталось только наделить его полномочиями.

не неси ерунду. признай что глупость сказал
опростоволосился!

МСУЯ тебе дал ссылку на рецепт. Изучи нативные возможности MVC :)

ты мне дал ссылку на кастомную реализацию DI. и ещё хватает смелости называть это нативной реализацией?? ну харе уже чушь-то пороть!

в чистом ASP.NET MVC нет никакого DI.

но есть возможность запихнуть свой говнокод в фабрику или поставить Autofac
...
Рейтинг: 0 / 0
22.11.2013, 12:05
    #38474036
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
hVosttэто не называется нативной поддержкой

тьфу, поддержка-то есть... нативного DI нету
...
Рейтинг: 0 / 0
22.11.2013, 12:08
    #38474046
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор IoC
Хвост, смотри, локатор только ищет и всё. Что следует даже из его названия.

То есть вот это поведение чисто локатора, не спорю:

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



А DependencyResolver может делать еще и так:

IDependencyResolver
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class DummyDependencyResolver : System.Web.Mvc.IDependencyResolver
{
    public object GetService(Type serviceType)
    {
        if (serviceType.Equals(typeof(IDataService)))
        {
            return new SqlDataService();
        }
        return null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    { 
        return Enumerable.Empty<object>();
    }
}



И даже вот так:

Код: c#
1.
DependencyResolver.SetResolver(new DummyDependencyResolver());



То есть это уже контейнер, получается. Да, без навороченных управлений life time, без непосредственного инжектирования - для этого есть фабрика, можно использовать её. Да и инжектирование многим не нужно, достаточно просто резолвить по месту требования. Лично я в MVC не использую инжектинг через фабрику - у меня в базовом контроллере поднимаются с помощью Lazy через инверсию все репозитории (контексты) и доступны в унаследованных контроллерах.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / выбор IoC / 25 сообщений из 286, страница 1 из 12
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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