Прежде всего нужно сказать, что мы приняли для наших проектов правило использовать Unity в качестве инструмента DI. Мы используем паттерн Model-View-ViewModel и стараемся сделать код максимально тестируемым.
Rikrop.Core.Framework.dll
Эта библиотека содержит множество наиболее обобщенных инструментов, которые находят применение из проекта в проект. Здесь находятся методы-расширения для стандартных контейнеров .NET, удобные реализации таймера, дополнительные типы данных для манипуляций с датами, классы-обёртки для работы с Active directory, инструменты разбора деревьев логических выражений, инфраструктура для работы с исключениями, абстракции для логирования и работы с сервисным слоем приложения.Rikrop.Core.Framework.Unity.dll
Библиотека с методами-расширениями IUnityContainer для регистрации и автоматической генерации кода фабрик объектов, предназначенных для избавления от избыточного кода для реализации dependency injection и ускорения процесса разработки приложений.Rikrop.Core.Wpf.dll
Фреймворк: Rikrop.Core.Wpf.dll. Часть 0, INotifyPropertyChangedНам было жизненно необходимо сделать разработку на wpf максимально удобной для нас, при этом тесно интегрировать презентационный слой приложения с нашим фреймворком. Как и во всех проектах фреймворка, мы ставили задачу гибкости и прозрачности использования разрабатываемого инструмента. WPF-библиотека является надстройкой и расширением над переносимой сборкой Rikrop.Core.Presentation.Portable.dll. Основные блоки библиотеки:
- Набор настраиваемых элементов управления на все случае жизни.
- Элементы управления и хелперы для максимального контроля за кастомизацией отображения окна приложения.
- Расширение механизма команд и реализации удобных средств создания и управления состоянием команд.
- Инфраструктура для удобной работы с коллекциями - коллекции, нотифицирующие об изменениях, постраничные загрузчики коллекций, динамически загружаемые коллекции.
- Наиболее полный и пополняемый набор из 50+ конвертеров значений.
- Пополняемый набор частоупотребимых и незаменимых во многих проектах attached properties.
- Обработчики исключений уровня приложения, отображающие информацию об исключении в понятном виде.
- Механизмы для управления визуализацией отображений в приложении.
- Базовые реализации объектов, нотифицирующих об изменениях своих свойств.
- Полная и самодостаточная реализация классов для быстрой разработки в рамках паттерна mvvm.
- Набор инфраструктурных классов для обеспечения отзывчивости приложения.
Rikrop.Core.Wcf.Unity.dll
В этой библиотеке мы собрали методы для простой и быстрой регистрации WCF-сервисов без использования громоздких конструкций в конфигурационных файлах. Это одна из двух библиотек, которая сделала использование wcf в наших приложениях совершенно прозрачным. Созданная инфраструктура позволила нам не заботиться об актуальности конфигурации сервисов и вызывать wcf так же просто, как и локальные методы.Rikrop.Core.Dataflow.dll
Rikrop.Core.Exceptions.dll
Rikrop.Core.Framework.Portable.dll
Rikrop.Core.Presentation.Portable.dll
Rikrop.Core.Wcf.Portable.dll
Rikrop.Core.Logging.dll
Rikrop.Core.Logging.NLog.dll
Rikrop.Core.MapReduce.dll
Rikrop.Core.Network.dll
Rikrop.Core.Testing.dll
Rikrop.Core.Threading.dll
Rikrop.Core.Wcf.dll
Rikrop.Core.Wpf.Unity.dll
Добрый день, прочитал про фреймворк на хабре и решил попробовать его
ОтветитьУдалитьиспользовать в своем проекте.
До этого я использовал стандарную настройку сервисов.
Что бы контролировать доступ был использован контракт следующего вида
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IAuthService
{
[OperationContract(IsInitiating = true,IsTerminating = false)] ServiceResult Login(string userName,string password);
[OperationContract(IsInitiating = false,IsTerminating = true)]
string Logout();
[OperationContract(IsInitiating = false, IsTerminating = true)]
ServiceResult> GetAllGCClients();
[OperationContract(IsInitiating = true, IsTerminating = true)]
ServiceResult> GetAllReportAggregators();
}
Вопросы:1. Можно ли добавить в сессию поведение, что бы дублировало
поведение при вызове методов из контракта, те некоторые методы требуют
логина, некоторые - нет.*
*2. Если использовать Behavior для регитстрации сессии, нужно ли указывать
свойства в атрибутах?*
*3. Это ближе к замечаниям: при вызове метода, если не регистрировать
Behavior для использования сессии, нормально вызывается метод *
* ServiceResult>
GetAllReportAggregators();*
но возникает ошибка при вызове
ServiceResult>
GetAllGCClients();
Добрый день.
УдалитьК сожалению, парсер жрёт комментарии с кодом и я не совсем понял 3 вопрос, т.к. нет нет понятного примера, да и в первом не уверен. Но постараюсь ответить.
1. Атрибуты не нужны, другое дело - как разделить AllowAnonymous-методы от остальных.
Если это разделение на уровне сервисов, то никакой проблемы нет - вы можете разделить серверную часть на 2 хостера, каждый из которых будет в своём IoC-контейнере. Если же хочется вызывать часть методов в рамках одного сервиса (что я, честно сказать, встречал чаще), то нужно будет, скорее всего, использовать на клиенте при регистрации WithCustomMessageInspectorFactory и свою реализацию. Для примера можно посмотреть, как реализована стандартная фабрика. Это, кстати, будет решением и в первом случае, при том более универсальным.
2. Нет, в атрибутах дублировать не нужно контейнерную регистрацию.
3. К сожалению, парсер слишком постарался над примерами кода и вопроса я не понял.
Необходимые ссылки.
Удалить1. Фабрика
2. Инспектор
Вот, видите, там идёт проверка того, является ли метод переданным в качестве логина. В своей реализации можно сделать фильтрацию по другим параметрам и всё будет работать.