Доступ к классу, который НЕ объявлен в App_Code в ASP.NET
Я иногда определяю классы Business Logic для "помощи" моих классов кода ASPX. Для меня наиболее разумно включить их в файл с кодом, поскольку они работают вместе. Тем не менее, мне иногда хотелось получить доступ к классам Business Logic из классов более высокого уровня, определенных в App_Code, но они не доступны автоматически вне файла.
Таким образом, вопрос: легко получить доступ к классам, определенным в App_Code, но как мне получить доступ к классам, определенным в другом месте?
UPDATE: Еще одна вещь: класс страницы ASPX и класс App_Code находятся в одном пространстве имен - это не проблема.
ПРИМЕЧАНИЕ. Я принял совет тех, кто ответил (спасибо ребятам), и рефакторинг, чтобы облегчить доступ к классам. Тем не менее, я не думаю, что на этот вопрос пока еще дан ответ (в случае проекта ASP.NET Website). Мне больше не нужен ответ, но если кто-то может прояснить, что делает классы видимыми, когда они находятся вне App_Code, это может помочь кому-то другому (или даже мне, по дороге).
Ответы
Ответ 1
Я предполагаю, что вы имеете в виду, что вы определяете отдельный класс внутри файла codecs.cs. Какие модификаторы доступа вы им даете?
Как и выше, у меня обычно был отдельный проект в решении для такого рода вещей (обычно в другом пространстве имен, например MyApp.Web и MyApp.), и просто ссылаюсь на него оттуда.
Ответ 2
Убедитесь, что вы размещаете свои классы в разумном пространстве имен.
Поместите ключевое слово 'using' в код за файлами, к которым вы хотели бы получить доступ.
Или <% @import, если вы используете их во встроенном коде.
Поместите dll, содержащую ваши классы в папку /bin.
TBH Я предпочитаю сохранить отдельный проект библиотеки в том же решении и иметь ссылку на проект в веб-проекте. VS обрабатывает создание и размещение DLL для вас.
Ответ 3
Некоторое время, когда вы создаете или добавляете какой-либо файл, он был создан в качестве файла содержимого, в то время как он должен компилировать файл.
Пожалуйста, следуйте процедуре, как решить эту проблему.
1) Щелкните правой кнопкой мыши файл вашего класса в папке App_Code.
2) Нажмите на свойства.
3) Измените действие сборки с "" на компиляцию
4) Восстановите свое приложение.
Это будет работать определенно
Тушар Тяги
Ответ 4
Вы также можете просто создать стандартную папку в своем проекте для доступа к классам и переместить их туда, но вам нужно сделать некоторые дополнительные вещи, чтобы сделать ее доступной для вашего проекта:
- Убедитесь, что вы не называете папку каким-либо из зарезервированных терминов (например, называете ее "AppCode", а не "App_Code" ), если вы столкнулись с проблемами в папке "App_Code", после прохождения остальной части этих пули.
- У всех классов должно быть такое же пространство имен, что и ваш код.
- Убедитесь, что классы становятся общедоступными, с общедоступными методами, если они вызываются из других классов.
- Включить "использование MyClass;" в верхней части файлов кода/класса.
- Убедитесь, что для свойства класса Class Action установлено значение Скомпилировать.
Ответ 5
Вы не можете получить доступ к классу из другого класса в том же коде за файлом, что и .net dsnt поддерживают множественное наследование. но вы можете создать свой бизнес-логический класс как внутренний класс в основном классе и сделать все его функции общедоступными, чтобы их можно было вызвать в основном классе.