powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получить имя свойства
25 сообщений из 28, страница 1 из 2
Получить имя свойства
    #38691178
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Ребят запутался, помогите пожалуйста разобраться.

Есть интерфейс, назовем его - ITest
В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp
Есть несколько классов явно реализующих этот интерфейс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
Class1 : ITest
{
MyType ITest.MyProp { get { return SomePropertyInClass; }
}
Class2 : ITest
{
MyType ITest.MyProp { get { return OtherProperty; }
}


Забегу наперед и уточню, что классы имеют другие свойства типа MyType.
Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки.
Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу.
Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty"
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691184
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
авторна это свойство и я не знаю заранее его имени, оно различно от класса к классу
имя у него одно, для всех классов, это же интерфейс
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691187
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиThor234,
авторна это свойство и я не знаю заранее его имени, оно различно от класса к классу
имя у него одно, для всех классов, это же интерфейс
Т.е. никак не получить имя свойства на которое ссылается ITest.MyProp?
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691192
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
"MyProp"
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691194
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
чето щас доперло propertyName путаем с Value,( какой травы обкурились?) курите рефлексию
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691199
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиThor234,
чето щас доперло propertyName путаем с Value,( какой травы обкурились?) курите рефлексию
Вот в том, то и дело курю, курю рефлексию а раскурить не могу никак.
Вот мне как раз нужно получить propertyName, я вроде не путаю propertyName с Value
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691200
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне думалось, раз реализация свойства явная , то есть способ достать.
Понятное дело, что если неявно реализовать интерфейс, то свойство и будет иметь propertyName - "MyProp"
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691207
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
причем тут реализация, явно не явно?
var name= typeof (ITest).GetProperties().First().Name;
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691216
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234Здравствуйте. Ребят запутался, помогите пожалуйста разобраться.

Есть интерфейс, назовем его - ITest
В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp
Есть несколько классов явно реализующих этот интерфейс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
Class1 : ITest
{
MyType ITest.MyProp { get { return SomePropertyInClass; }
}
Class2 : ITest
{
MyType ITest.MyProp { get { return OtherProperty; }
}


Забегу наперед и уточню, что классы имеют другие свойства типа MyType.
Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки.
Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу.
Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty"А может простым языком объясните, что конкретно нужно проверить?

Иначе используйте отражение (Refelection). Производительность только не забудьте замерить :)
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691222
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиThor234,
причем тут реализация, явно не явно?
var name= typeof (ITest).GetProperties().First().Name;
Все, понял свою ошибку. Действительно получает имя как объявлено в интерфейсе.
Буду искать другой путь.
Спасибо добрый человек
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691236
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAThor234Здравствуйте. Ребят запутался, помогите пожалуйста разобраться.

Есть интерфейс, назовем его - ITest
В этом интерфейсе объявлено свойство типа MyType, назовем его - MyProp
Есть несколько классов явно реализующих этот интерфейс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
Class1 : ITest
{
MyType ITest.MyProp { get { return SomePropertyInClass; }
}
Class2 : ITest
{
MyType ITest.MyProp { get { return OtherProperty; }
}


Забегу наперед и уточню, что классы имеют другие свойства типа MyType.
Есть некий метод сторонней библиотеки для проверки прав доступа. В параметры метода передается имя свойства для проверки.
Само проверяемое свойство зависит от конкретного класса, но у меня на руках есть лишь экземпляр ITest со ссылкой (ITest.MyProp) на это свойство и я не знаю заранее его имени, оно различно от класса к классу.
Так вот как мне достать имя (string) свойства которое возвращено при реализации интерфейса? Т.е. при текущей реализации для Class1 - "SomePropertyInClass" и для Class2 - "OtherProperty"А может простым языком объясните, что конкретно нужно проверить?

Иначе используйте отражение (Refelection). Производительность только не забудьте замерить :)
Как я уже сказал использую стороннюю библиотеку ORM, грубо говоря используется для разграничения прав. Есть в ней метод проверяющий "имеет ли" конкретный пользователь права на запись конкретного поля "персистентного" класса (это же ORM).
Но некий общий функционал использует эти классы как интерфейсы. И нужно проверять права на запись.
В общем мне кажется я еще больше запутал :)
Понял, что имея на руках интерфейсную ссылку получить имя поля класса возвращаемое при реализации интерфейса никак не получится
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691252
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расковыряйте ORM рефлектором и посмотрите как там это реализовано.
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691253
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вообще маппинги они двух типов: на отражении (Reflection) и на сгенерированных на основе чего-то (файла xml например) метаданных.
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691258
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ORM-то небось строковое имя свойства - это ключ в какой нибудь готовой карте/словарике (Map) метаданных. По нему они быстро достаются и что-то там проверяется, флаг AllowWrite
Вам зачем на него ориентироваться, не понятно.
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691260
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
авторПонял, что имея на руках интерфейсную ссылку получить имя поля класса возвращаемое при реализации интерфейса никак не получится
я так и ничего не понял, что вы хотите.
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691294
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
чего то подумалось, а как вы будете объяснять пользователю, что привилегий не хватает, алертом или исключением.
так вот что бы имхо не доводить до греха и искушения, сделайте разграничение прав на уровне приложения , а базу как последний
РЕДУТ, а если не персистентный класс на вставку, то че исключение? дак не допускайте на уровне приложения вставки модификации или удаления,
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691295
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если потом в трехзвенку все это хозяйство надо будет переделать? то ваще прикурим с этими макаронами..
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691604
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAВ ORM-то небось строковое имя свойства - это ключ в какой нибудь готовой карте/словарике (Map) метаданных. По нему они быстро достаются и что-то там проверяется, флаг AllowWrite
Вам зачем на него ориентироваться, не понятно.
Если копать глубже, то по сути дела Вы правы, так и есть - каждое поле класса отмеченное атрибутом это поле в БД, но еще бывают у полей алиасы на поля БД, т.е. имя свойства класса и имя поля в БД могут не совпадать. Тот метод в который мне нужно передать строковое название свойства (memberName) уже дальше сам рефлексией находит поле в классе, смотрит атрибуты маппинга, проверяет права и т.д. и если я ему передам в качестве параметра маппинг на поле в БД, то неизвестно, что может произойти в будущем.

Товарищи, думаю уж очень плохо я объяснил суть проблемы. Тяжеловато иногда объяснить все подробности конкретного случаю, не сердчайте :)

Попробую еще раз объяснить, что нужно в результате не вдаваясь в подробности, но иллюстрируя именно мою ситуацию.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
interface ITest
{
    MyType MyProp {get;}
}

//Этот класс имеет одно свойство MyProp, которое попадает под реализацию интерфейса
Class1 : ITest
{
    MyType MyProp { get; }
}
//Этот класс также реализует свойство MyProp интерфейса ITest, но нас не устраивает по каким либо причинам свойство MyProp и мы явно реализуем поддержку интерфейса передав другое поле того же типа
Class2 : ITest
{
    MyType ITest.MyProp { get { return OtherMyTypeProperty; }
    MyType MyProp { get; }
    MyType OtherMyTypeProperty { get; }
}


Далее имею на руках:
Код: c#
1.
2.
3.
4.
//Это может быть экземпляр как Class1, так и Class2
var currentObject = View.CurrentObject as ITest;
//Экземпляр класса Type текущего класса, т.е. тут я уже имею тип класса, допустим это typeof(Class2)
var currentObjectType = View.GetCurrentObjectType();


Итого имея, то что есть можно ли и как получить memberName (которое равно "OtherMyTypeProperty") свойства MyProp для нашего объекта currentObject as ITest
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691636
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал так:
currentObjectType.GetProperties().First(prop => prop.GetValue(currentObject) == currentObject.MyType)
Но потом понял, что другие поля типа MyProp экземпляра currentObject могут иметь, то же самое значение и этот подход вернет не правильное PropertyInfo
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691692
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234, у меня сложилось впечатление, что Вы тупо пытаетесь для решения своей проблемы заюзать функционал ORM.
Типа в нём есть метод, что вроде делает то, что Вам надо, только вот осталось ему наименование нужного поля передать.

Думали, что побырику получите это наименование и вуаля. Но не тут-то было

Может не стоит завязываться на ORM, а реализовать необходимую логику нормальным путём?
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691703
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAThor234, у меня сложилось впечатление, что Вы тупо пытаетесь для решения своей проблемы заюзать функционал ORM.
Типа в нём есть метод, что вроде делает то, что Вам надо, только вот осталось ему наименование нужного поля передать.

Думали, что побырику получите это наименование и вуаля. Но не тут-то было

Может не стоит завязываться на ORM, а реализовать необходимую логику нормальным путём?
К счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем, и дабы не плодить огород из однотипных действий для разных классов и служит интерфейс. А проверка прав нужна лишь для установки видимости грубо говоря кнопки выполняющей это действие. Использую разграничение прав на уровне приложения
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691737
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
авторК счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем
это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут
если все рухнуло - это говно..
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691743
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиThor234К счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем
это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут
если все рухнуло - это говно..
+1
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691786
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиThor234,
авторК счастью Вы не правы, все приложение построено на базе ORM, но есть мой дополнительный функционал, действия выполняемые пользователем
это легко проверить, что вы написали, проведите мысленный тест, поменяйте тип орм которая не поддерживает гранты - привилегии, там должно измениться немного кода в модуле получения данных, атрибуты мапа, если ваш модуль так же защищает права - гут
если все рухнуло - это говно..
Есть такой замечательный фреймворк от DevExpress - eXpressApp
В котором базовый функционал ORM, разграничение прав доступа и многое, многое другое из коробки.
Создавая приложение работаешь в основном с бизнес объектами. И реализуя свой дополнительный функционал - нужно лишь поддержать концепцию фреймворка по разграничению прав. Никаких велосипедов я не строю и не собираюсь
Люди будьте добрее.
...
Рейтинг: 0 / 0
Получить имя свойства
    #38691799
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thor234,
так зачем же вы для поддержания концепции лезете в коробку ( практикуете Проктологию), если вы пишете защиту
на уровне своего модуля, причем тут девки, вместо них может быть и другая орм, или вообще сервис, или другое soa.
Вы не можете сделать свой модуль изолированным от видов орм? вы не можете получить запросом привилегии для пользователя?
и строить защиту от этого?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получить имя свойства
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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