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

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

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

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


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


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