Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Несколько вопросов по Unity / 7 сообщений из 7, страница 1 из 1
17.04.2009, 17:33
    #35939393
SergASh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
Привет всем!

Вопросы тем, кто знает Unity (DI/IoC библиотека от микрософт)

1. Действительно ли она не умеет резолвить типы из сборки System без плясок с бубном? Вот, например, при таком конфиге
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  <unity>
    <typeAliases>
      <!-- Primitive Types -->
      <typeAlias alias="string" type="System.String, mscorlib" />
      <typeAlias alias="int" type="System.Int32, mscorlib" />
      <!-- -->
      <typeAlias alias="IWebProxy" type="System.Net.IWebProxy, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <typeAlias alias="WebProxy" type="System.Net.WebProxy, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!-- Unity Types -->
      <typeAlias alias="singleton"
                 type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
    </typeAliases>
  </unity>
все нормально, а если просто написать
Код: plaintext
<typeAlias alias="IWebProxy" type="System.Net.IWebProxy, System" />
то получаем ошибку "Could not load file or assembly 'System' or one of its dependencies" в момент инициализации контейнера. А ведь для mscorlib и для самой Unity полное имя не обязательно. Для моих собственных сборок тоже не нужно - проверял. Как же так?

2. Если для некоторой конфигурации я хочу отобразить интерфейс не на какой-то класс, а на null, то как это сделать? Например, IWebProxy у меня используется для перенаправления HTTP-трафика в снифер для анализа и отладки. В какой-то момент мне это перестанет быть нужно, поэтому везде, где надо резолвить IWebProxy, я хочу получить от контейнера null. Вполне ожидаемый usecase, но я не нашёл как это сделать.

Спасибо.
...
Рейтинг: 0 / 0
17.04.2009, 18:09
    #35939499
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
If'ы с проверкой на null,на ожидаемый use case не тянут.В Unity интерфейсы должны мапиться на конкретные реализации.
На мой взгляд возможны два варианта:
- паттерн Null Object с пустышкой
- условная компиляция
- задаем уровни детализации лога
...
Рейтинг: 0 / 0
18.04.2009, 01:31
    #35940040
SergASh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
SeVaа. паттерн Null Object с пустышкой
б. условная компиляция
в. задаем уровни детализации лога
а. Это в целом мысль очень здравая. Вот только в случае с WebProxy может и не прокатить. Мне оно надо для HttpWebRequest, а он если принимает не null, то не факт, что сможет работать так же, как если бы прокси не было. Разве что IsBypassed заставить всегда возвращать true. Но это надо проверять.
б. Брутально слишком :) Не управляется через конфиг, так что не подходит.
в. Этого не понял. Поясните, пожалуйста
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.02.2013, 23:26
    #38139104
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
Как замапить открытый универсальный интерфейс на открытый универсальный класс при помощи XML-конфига?
В коде это просто
Код: c#
1.
.RegisterType(typeof(IRepository<>), typeof(Repository<>))

, а в XML должно быть что-то вида
Код: xml
1.
<register type="WebSite.Domain.IRepository[], Domain" mapTo="WebSite.EFInfrastructure.Repository[], EFInfrastructure"/>

, но такая конструкция не работает. Как правильно это написать?
...
Рейтинг: 0 / 0
06.02.2013, 09:27
    #38139362
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
LexxxxxКак замапить открытый универсальный интерфейс на открытый универсальный класс при помощи XML-конфига?
В коде это просто
Код: c#
1.
.RegisterType(typeof(IRepository<>), typeof(Repository<>))

, а в XML должно быть что-то вида
Код: xml
1.
<register type="WebSite.Domain.IRepository[], Domain" mapTo="WebSite.EFInfrastructure.Repository[], EFInfrastructure"/>

, но такая конструкция не работает. Как правильно это написать?

Вместо [] должно быть '1. Чтобы не путаться смотри, что будет выдавать typeof(IRepository<>).FullName
...
Рейтинг: 0 / 0
06.02.2013, 11:21
    #38139575
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
SeVaВместо [] должно быть '1. Чтобы не путаться смотри, что будет выдавать typeof(IRepository<>).FullName

В инструкции написано:
To specify an open generic type you simply leave out the type parameters. You have two options:
Use the CLR notation of `N where N is the number of generic parameters.
Use the square brackets, with commas, to indicate the number of generic parameters.

Разобрался. Прописать-то я прописал, а ссылки на сборки не сделал в проекте. )
...
Рейтинг: 0 / 0
07.02.2013, 11:23
    #38141304
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по Unity
Как (и можно ли вообще) написать в XML конфиге конструкцию вида:
Код: c#
1.
diContainer.RegisterType<WebSiteDBContext>(new InjectionFactory(x => HttpContext.Current.Items["DBSession"] as WebSiteDBContext));


?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Несколько вопросов по Unity / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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