Unity и конвертация типов
От: sergunok  
Дата: 26.01.11 13:24
Оценка:
Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?

На примере:

public class X
{
public X(A a)
{
..
}
}


Реально инициализирую объект как-то так:
var x = new X( Helper.A_from_B(new B(...)));

Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?
Re: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.01.11 13:43
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?


S>На примере:


S>public class X

S>{
S> public X(A a)
S> {
S> ..
S> }
S>}


S>Реально инициализирую объект как-то так:

S>var x = new X( Helper.A_from_B(new B(...)));

S>Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?


Через фабрики
Re[2]: Unity и конвертация типов
От: sergunok  
Дата: 26.01.11 15:07
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?


S>>На примере:


S>>public class X

S>>{
S>> public X(A a)
S>> {
S>> ..
S>> }
S>>}


S>>Реально инициализирую объект как-то так:

S>>var x = new X( Helper.A_from_B(new B(...)));

S>>Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?


G>Через фабрики


Спасибо!

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

До этого пробовал использовать конвертер типа, но столкнулся с тем, что он ограничен (инстанс самого конвертера вроде как не инджектируется, строго создается конструктором без параметров).
Re[2]: Unity и конвертация типов
От: sergunok  
Дата: 26.01.11 15:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?


S>>На примере:


S>>public class X

S>>{
S>> public X(A a)
S>> {
S>> ..
S>> }
S>>}


S>>Реально инициализирую объект как-то так:

S>>var x = new X( Helper.A_from_B(new B(...)));

S>>Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?


G>Через фабрики


Увы, мне не поможет.

Вот тут я некорректно сформулировал:
S>>var x = new X( Helper.A_from_B(new B(...)));


Helper — не статичен.. Сам может ресолвится контейнером.

var helper = Helper(...);

var x = new X( helper.A_from_string("some value"));

Мне бы подошел typeConverter, который можно указывать у value в param constructor,

<register type="X">
<constructor>
<param name="a">
<value typeConverter="Helper" value="some value"/>
</param>
</constructor>
</register>


но, к сожалению, сам конвертер нельзя брать из контейнера, т.е. инжектировать конструктор Helper не могу.
Re[3]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.01.11 15:42
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, sergunok, Вы писали:


S>>>Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?


S>>>На примере:


S>>>public class X

S>>>{
S>>> public X(A a)
S>>> {
S>>> ..
S>>> }
S>>>}


S>>>Реально инициализирую объект как-то так:

S>>>var x = new X( Helper.A_from_B(new B(...)));

S>>>Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?


G>>Через фабрики


S>Увы, мне не поможет.


S>Вот тут я некорректно сформулировал:

S>>>var x = new X( Helper.A_from_B(new B(...)));


S>Helper — не статичен.. Сам может ресолвится контейнером.


S>var helper = Helper(...);


S>var x = new X( helper.A_from_string("some value"));


А так:

container.RegisterFactory<IX>(c => c.Resolve<IHelper>().FromString(c.Resolve<string>("string in config")))
Re[4]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 09:40
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, sergunok, Вы писали:


S>>>>Кто-нибудь знает, может ли Unity при разрешении скажем параметра конструктора типа A разрешить значение этого параметра из другого типа B путем вызова функции?


S>>>>На примере:


S>>>>public class X

S>>>>{
S>>>> public X(A a)
S>>>> {
S>>>> ..
S>>>> }
S>>>>}


S>>>>Реально инициализирую объект как-то так:

S>>>>var x = new X( Helper.A_from_B(new B(...)));

S>>>>Вызов этого Helper.A_from_B в конфиг контейнера никак не передать?


G>>>Через фабрики


S>>Увы, мне не поможет.


S>>Вот тут я некорректно сформулировал:

S>>>>var x = new X( Helper.A_from_B(new B(...)));


S>>Helper — не статичен.. Сам может ресолвится контейнером.


S>>var helper = Helper(...);


S>>var x = new X( helper.A_from_string("some value"));


G>А так:


G>
G>container.RegisterFactory<IX>(c => c.Resolve<IHelper>().FromString(c.Resolve<string>("string in config")))
G>


В моем случае не хочется сами константы "string in config" прописывать в коде.

Привожу более жизненный пример того, что хочется поинжектить.
Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.

Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

Я злоупотребляю DI? Стоит взглянуть на что-то кроме Unity?



interface IServer
{
Page Download(string name);
}

class Server : IServer
{
Server(string host, int port);
}

interface IParser
{
void ParseAll();
}

class Parser : IParser
{
Parser(IEnumerable<IPage> pages);
void ParseAll();
}

IServer server = new Server("myhost", 1234);

IParser parser = new Parser(
new List<IPage>() {
server.Download("a.txt"),
server.Download("b.txt"),
server.Download("c.txt"),
server.Download("d.txt")
});
Re[5]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 09:52
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Привожу более жизненный пример того, что хочется поинжектить.

S>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
имена страниц лучше где-нить отдельно задавать, а не в контейнере

S>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

Непонятно... Напиши как ты хочешь чтобы это выглядело.
Re[6]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 11:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Привожу более жизненный пример того, что хочется поинжектить.

S>>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
G>имена страниц лучше где-нить отдельно задавать, а не в контейнере
почему?

S>>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

G>Непонятно... Напиши как ты хочешь чтобы это выглядело.

хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.
Re[7]: Unity и конвертация типов
От: Codechanger Россия  
Дата: 27.01.11 11:24
Оценка:
Здравствуйте, sergunok, Вы писали:


S>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.


Java-style?
Re[8]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 11:28
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Здравствуйте, sergunok, Вы писали:



S>>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.


C>Java-style?

Что это?
Re[7]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 11:44
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, sergunok, Вы писали:


S>>>Привожу более жизненный пример того, что хочется поинжектить.

S>>>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
G>>имена страниц лучше где-нить отдельно задавать, а не в контейнере
S>почему?
Потому что контейнер оперирует типами, в крайнем случае парами (тип, имя), а строки зачастую содержат семантику, которая не выражается типами и именами.


S>>>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

G>>Непонятно... Напиши как ты хочешь чтобы это выглядело.
S>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.
Не стоит, а то получится программирование в XML, это гораздо тяжелее чем программировать на C#.

http://gandjustas.blogspot.com/2009/01/unity_8026.html
Re[8]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 13:13
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, sergunok, Вы писали:


S>>>>Привожу более жизненный пример того, что хочется поинжектить.

S>>>>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
G>>>имена страниц лучше где-нить отдельно задавать, а не в контейнере
S>>почему?
G>Потому что контейнер оперирует типами, в крайнем случае парами (тип, имя), а строки зачастую содержат семантику, которая не выражается типами и именами.


S>>>>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

G>>>Непонятно... Напиши как ты хочешь чтобы это выглядело.
S>>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.
G>Не стоит, а то получится программирование в XML, это гораздо тяжелее чем программировать на C#.

G>http://gandjustas.blogspot.com/2009/01/unity_8026.html


Наверное вопрос в том: должен ли контейнер быть самодостаточным для конфигурации приложения..
Или же его роль — только помощь в конфигурировании IoC (т.е. только позволять определять конкретные типы, реализующие интерфейсы).

На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,
причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.

Никто не в курсе насчет более развитых аналогов?
Re[9]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 13:14
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, sergunok, Вы писали:


S>>>Здравствуйте, gandjustas, Вы писали:


G>>>>Здравствуйте, sergunok, Вы писали:


S>>>>>Привожу более жизненный пример того, что хочется поинжектить.

S>>>>>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
G>>>>имена страниц лучше где-нить отдельно задавать, а не в контейнере
S>>>почему?
G>>Потому что контейнер оперирует типами, в крайнем случае парами (тип, имя), а строки зачастую содержат семантику, которая не выражается типами и именами.


S>>>>>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

G>>>>Непонятно... Напиши как ты хочешь чтобы это выглядело.
S>>>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.
G>>Не стоит, а то получится программирование в XML, это гораздо тяжелее чем программировать на C#.

G>>http://gandjustas.blogspot.com/2009/01/unity_8026.html


S>Наверное вопрос в том: должен ли контейнер быть самодостаточным для конфигурации приложения..

S>Или же его роль — только помощь в конфигурировании IoC (т.е. только позволять определять конкретные типы, реализующие интерфейсы).
Что значит "самодостаточный" и "помощь в конфигурировании"?

http://gandjustas.blogspot.com/2009/01/ioc_20.html

S>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
Для этого есть самый обычный конфиг.
Re[10]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 16:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, sergunok, Вы писали:


S>>>>Здравствуйте, gandjustas, Вы писали:


G>>>>>Здравствуйте, sergunok, Вы писали:


S>>>>>>Привожу более жизненный пример того, что хочется поинжектить.

S>>>>>>Нужна возможность с легкостью оперировать разными значениями параметров сервера и именами страниц.
G>>>>>имена страниц лучше где-нить отдельно задавать, а не в контейнере
S>>>>почему?
G>>>Потому что контейнер оперирует типами, в крайнем случае парами (тип, имя), а строки зачастую содержат семантику, которая не выражается типами и именами.


S>>>>>>Если с коллекцией объектов в Unity видимо вопрос можно как-то решить, то вот с вызовом метода Download — непонятно.

G>>>>>Непонятно... Напиши как ты хочешь чтобы это выглядело.
S>>>>хочется всегда одного, чтобы приложение для разных случаев использования конфигурировалось в XML-файле, желательно в одном.
G>>>Не стоит, а то получится программирование в XML, это гораздо тяжелее чем программировать на C#.

G>>>http://gandjustas.blogspot.com/2009/01/unity_8026.html


S>>Наверное вопрос в том: должен ли контейнер быть самодостаточным для конфигурации приложения..

S>>Или же его роль — только помощь в конфигурировании IoC (т.е. только позволять определять конкретные типы, реализующие интерфейсы).
G>Что значит "самодостаточный" и "помощь в конфигурировании"?
"самодостаточный" = не требующий дополнительных средств для конфигурирования приложения типа "обычного конфига"

G>http://gandjustas.blogspot.com/2009/01/ioc_20.html


S>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>Для этого есть самый обычный конфиг.
В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
Re[11]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 18:41
Оценка:
Здравствуйте, sergunok, Вы писали:

S>>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>>Для этого есть самый обычный конфиг.
S>В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
Так это один и тот же конфиг...
Re[12]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 19:05
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>>>Для этого есть самый обычный конфиг.
S>>В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
G>Так это один и тот же конфиг...
Да, но если уж я в нем описываю перечь имен файлов для скачивания для данного сценария и для каждого файла еще что-нибудь, например тип компонента, отвечающего за скачивание, хочется чтоб это не было разбросано по разным частям конфига — одно просто в конфиге, другое в секции Unity..
Re[13]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 19:27
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, sergunok, Вы писали:


S>>>>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>>>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>>>>Для этого есть самый обычный конфиг.
S>>>В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
G>>Так это один и тот же конфиг...
S>Да, но если уж я в нем описываю перечь имен файлов для скачивания для данного сценария и для каждого файла еще что-нибудь, например тип компонента, отвечающего за скачивание, хочется чтоб это не было разбросано по разным частям конфига — одно просто в конфиге, другое в секции Unity..

По-моему ты уже начал программировать в xml. Бросай это дело, на C# проще.
Re[14]: Unity и конвертация типов
От: sergunok  
Дата: 27.01.11 20:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, sergunok, Вы писали:


S>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, sergunok, Вы писали:


S>>>>>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>>>>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>>>>>Для этого есть самый обычный конфиг.
S>>>>В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
G>>>Так это один и тот же конфиг...
S>>Да, но если уж я в нем описываю перечь имен файлов для скачивания для данного сценария и для каждого файла еще что-нибудь, например тип компонента, отвечающего за скачивание, хочется чтоб это не было разбросано по разным частям конфига — одно просто в конфиге, другое в секции Unity..

G>По-моему ты уже начал программировать в xml. Бросай это дело, на C# проще.

Не-не. Все, что надо уже сделано на смеси C#, Unity и конфига. Это лишь рассуждения об идеале
Re[15]: Unity и конвертация типов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.01.11 20:35
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, sergunok, Вы писали:


S>>>Здравствуйте, gandjustas, Вы писали:


G>>>>Здравствуйте, sergunok, Вы писали:


S>>>>>>>На мой взгляд, в Unity сделали больше чем только IoC, но и сильно меньше, чем нужно для конфигурирования. А конфигурировать всяко удобно в одном месте,

S>>>>>>>причем конфиугрировать все: и константы и типы и объекты типов и их коллекции.
G>>>>>>Для этого есть самый обычный конфиг.
S>>>>>В этом-то и неудобство, что что-то нужно делать в конфиге, что-то в настройках Unity и пусть даже они могут находиться в одном файле.
G>>>>Так это один и тот же конфиг...
S>>>Да, но если уж я в нем описываю перечь имен файлов для скачивания для данного сценария и для каждого файла еще что-нибудь, например тип компонента, отвечающего за скачивание, хочется чтоб это не было разбросано по разным частям конфига — одно просто в конфиге, другое в секции Unity..

G>>По-моему ты уже начал программировать в xml. Бросай это дело, на C# проще.

S>Не-не. Все, что надо уже сделано на смеси C#, Unity и конфига. Это лишь рассуждения об идеале

Идеал — не ковыряться в конфиге вообще.
Re[9]: Unity и конвертация типов
От: Legion13  
Дата: 28.01.11 07:05
Оценка:
Здравствуйте, sergunok, Вы писали:

S>Никто не в курсе насчет более развитых аналогов?

Autofac.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.