|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Здравствуйте. Ребят запутался, помогите пожалуйста разобраться. Есть интерфейс, назовем его - ITest В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp Есть несколько классов явно реализующих этот интерфейс Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Забегу наперед и уточню, что классы имеют другие свойства типа MyType. Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки. Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу. Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 22:31 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, авторна это свойство и я не знаю заранее его имени, оно различно от класса к классу имя у него одно, для всех классов, это же интерфейс ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 22:44 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Где-то в степиThor234, авторна это свойство и я не знаю заранее его имени, оно различно от класса к классу имя у него одно, для всех классов, это же интерфейс Т.е. никак не получить имя свойства на которое ссылается ITest.MyProp? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 22:48 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, "MyProp" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 22:57 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, чето щас доперло propertyName путаем с Value,( какой травы обкурились?) курите рефлексию ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 22:59 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Где-то в степиThor234, чето щас доперло propertyName путаем с Value,( какой травы обкурились?) курите рефлексию Вот в том, то и дело курю, курю рефлексию а раскурить не могу никак. Вот мне как раз нужно получить propertyName, я вроде не путаю propertyName с Value ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:07 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Мне думалось, раз реализация свойства явная , то есть способ достать. Понятное дело, что если неявно реализовать интерфейс, то свойство и будет иметь propertyName - "MyProp" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:09 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, причем тут реализация, явно не явно? var name= typeof (ITest).GetProperties().First().Name; ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:20 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234Здравствуйте. Ребят запутался, помогите пожалуйста разобраться. Есть интерфейс, назовем его - ITest В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp Есть несколько классов явно реализующих этот интерфейс Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Забегу наперед и уточню, что классы имеют другие свойства типа MyType. Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки. Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу. Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty"А может простым языком объясните, что конкретно нужно проверить? Иначе используйте отражение (Refelection). Производительность только не забудьте замерить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:36 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Где-то в степиThor234, причем тут реализация, явно не явно? var name= typeof (ITest).GetProperties().First().Name; Все, понял свою ошибку. Действительно получает имя как объявлено в интерфейсе. Буду искать другой путь. Спасибо добрый человек ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:41 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
skyANAThor234Здравствуйте. Ребят запутался, помогите пожалуйста разобраться. Есть интерфейс, назовем его - ITest В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp Есть несколько классов явно реализующих этот интерфейс Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Забегу наперед и уточню, что классы имеют другие свойства типа MyType. Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки. Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу. Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty"А может простым языком объясните, что конкретно нужно проверить? Иначе используйте отражение (Refelection). Производительность только не забудьте замерить :) Как я уже сказал использую стороннюю библиотеку ORM, грубо говоря используется для разграничения прав. Есть в ней метод проверяющий "имеет ли" конкретный пользователь права на запись конкретного поля "персистентного" класса (это же ORM). Но некий общий функционал использует эти классы как интерфейсы. И нужно проверять права на запись. В общем мне кажется я еще больше запутал :) Понял, что имея на руках интерфейсную ссылку получить имя поля класса возвращаемое при реализации интерфейса никак не получится ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2014, 23:53 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Расковыряйте ORM рефлектором и посмотрите как там это реализовано. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 00:19 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Но вообще маппинги они двух типов: на отражении (Reflection) и на сгенерированных на основе чего-то (файла xml например) метаданных. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 00:21 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
В ORM-то небось строковое имя свойства - это ключ в какой нибудь готовой карте/словарике (Map) метаданных. По нему они быстро достаются и что-то там проверяется, флаг AllowWrite Вам зачем на него ориентироваться, не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 00:27 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, авторПонял, что имея на руках интерфейсную ссылку получить имя поля класса возвращаемое при реализации интерфейса никак не получится я так и ничего не понял, что вы хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 00:31 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, чего то подумалось, а как вы будете объяснять пользователю, что привилегий не хватает, алертом или исключением. так вот что бы имхо не доводить до греха и искушения, сделайте разграничение прав на уровне приложения , а базу как последний РЕДУТ, а если не персистентный класс на вставку, то че исключение? дак не допускайте на уровне приложения вставки модификации или удаления, ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 02:13 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
а если потом в трехзвенку все это хозяйство надо будет переделать? то ваще прикурим с этими макаронами.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 02:15 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
skyANAВ ORM-то небось строковое имя свойства - это ключ в какой нибудь готовой карте/словарике (Map) метаданных. По нему они быстро достаются и что-то там проверяется, флаг AllowWrite Вам зачем на него ориентироваться, не понятно. Если копать глубже, то по сути дела Вы правы, так и есть - каждое поле класса отмеченное атрибутом это поле в БД, но еще бывают у полей алиасы на поля БД, т.е. имя свойства класса и имя поля в БД могут не совпадать. Тот метод в который мне нужно передать строковое название свойства (memberName) уже дальше сам рефлексией находит поле в классе, смотрит атрибуты маппинга, проверяет права и т.д. и если я ему передам в качестве параметра маппинг на поле в БД, то неизвестно, что может произойти в будущем. Товарищи, думаю уж очень плохо я объяснил суть проблемы. Тяжеловато иногда объяснить все подробности конкретного случаю, не сердчайте :) Попробую еще раз объяснить, что нужно в результате не вдаваясь в подробности, но иллюстрируя именно мою ситуацию. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Далее имею на руках: Код: c# 1. 2. 3. 4.
Итого имея, то что есть можно ли и как получить memberName (которое равно "OtherMyTypeProperty") свойства MyProp для нашего объекта currentObject as ITest ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 11:13 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Пробовал так: currentObjectType.GetProperties().First(prop => prop.GetValue(currentObject) == currentObject.MyType) Но потом понял, что другие поля типа MyProp экземпляра currentObject могут иметь, то же самое значение и этот подход вернет не правильное PropertyInfo ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 11:24 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, у меня сложилось впечатление, что Вы тупо пытаетесь для решения своей проблемы заюзать функционал ORM. Типа в нём есть метод, что вроде делает то, что Вам надо, только вот осталось ему наименование нужного поля передать. Думали, что побырику получите это наименование и вуаля. Но не тут-то было Может не стоит завязываться на ORM, а реализовать необходимую логику нормальным путём? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 11:54 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
skyANAThor234, у меня сложилось впечатление, что Вы тупо пытаетесь для решения своей проблемы заюзать функционал ORM. Типа в нём есть метод, что вроде делает то, что Вам надо, только вот осталось ему наименование нужного поля передать. Думали, что побырику получите это наименование и вуаля. Но не тут-то было Может не стоит завязываться на ORM, а реализовать необходимую логику нормальным путём? К счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем, и дабы не плодить огород из однотипных действий для разных классов и служит интерфейс. А проверка прав нужна лишь для установки видимости грубо говоря кнопки выполняющей это действие. Использую разграничение прав на уровне приложения ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:01 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, авторК счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут если все рухнуло - это говно.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:16 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Где-то в степиThor234К счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут если все рухнуло - это говно.. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:20 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Где-то в степиThor234, авторК счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут если все рухнуло - это говно.. Есть такой замечательный фреймворк от DevExpress - eXpressApp В котором базовый функционал ORM, разграничение прав доступа и многое, многое другое из коробки. Создавая приложение работаешь в основном с бизнес объектами. И реализуя свой дополнительный функционал - нужно лишь поддержать концепцию фреймворка по разграничению прав. Никаких велосипедов я не строю и не собираюсь Люди будьте добрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:46 |
|
Получить имя свойства
|
|||
---|---|---|---|
#18+
Thor234, так зачем же вы для поддержания концепции лезете в коробку ( практикуете Проктологию), если вы пишете защиту на уровне своего модуля, причем тут девки, вместо них может быть и другая орм, или вообще сервис, или другое soa. Вы не можете сделать свой модуль изолированным от видов орм? вы не можете получить запросом привилегии для пользователя? и строить защиту от этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:57 |
|
|
start [/forum/search_topic.php?author=Oldkeyboo&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 438ms |
total: | 730ms |
0 / 0 |