1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chejiangyi-BSF.Aop

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

BSF.Aop#

.Net открытый исходный код, статический Aop вплетён (прямое изменение промежуточного языка IL), фреймворк, похожий на PostSharp (платный);
Реализует предварительные и последующие аспекты Aop и способ внедрения INotifyPropertyChanged.

Описание:

  • Статическое вплетение обеспечивает производительность, близкую к написанию исходного кода.
  • Структура проекта расширяется от базовой структуры BSF, но dll не зависит от BSF.dll, что позволяет разрабатывать независимо.
  • Объём кода проекта невелик (всего несколько классов), основные функции разделены на модули для удобства расширения третьими сторонами, чтения, отладки и доработки.
  • .net Aop со статическим вплетением — это открытый исходный проект, который редко встречается или пока не известен, поэтому он надеется стать отправной точкой и примером для подобных открытых проектов.

by 车江毅

QQ группа открытого исходного кода: .net 开源基础服务 238543768 добро пожаловать в общение
Этот aop является исследовательским по своей природе и в настоящее время не используется в официальных проектах (в отзывах об открытом исходном коде кажется, что есть проблемы с окружающей средой). Если вы изучаете, рекомендуется посмотреть код. Если это официальный проект, то пока не рекомендуется.

Использование конфигурации

  1. Проект ссылается на BSF.Aop.dll, Mono.Cecil.dll и Mono.Cecil.Pdb.dll.
  2. Добавьте одну строку кода в стартовый код проекта: AopStartLoader.Start(); (Этот код используется для автоматического сканирования и автоматической настройки среды vs проекта, экспорта соответствующих исполняемых файлов и т. д.)

Примечание:

  • Web проект добавляет в Application_Start;
  • Winform проект добавляет в Pragram.Main.

Автоматическая конфигурация (рекомендуется по умолчанию)

Скомпилируйте проект, а затем запустите и отладьте его напрямую.

Примечание:

  • AopStartLoader.Start() при первом запуске проекта выдаст ошибку, потому что среда Aop ещё не настроена автоматически; после успешной автоматической настройки при первом запуске последующие запуски будут автоматически внедрены.
  • По умолчанию будет создана папка «packages.BSF.Aop» в каталоге проекта, и «aop run script» будет внедрён в событие PostBuildEvent vs проекта. Конкретные детали см. в разделе «Ручная настройка».

Ручная настройка (рекомендуется при возникновении проблем)

  1. Настройте каталог внедрения Aop. Создайте новую папку packages.BSF.Aop в каталоге vs проекта и поместите в неё следующие файлы: BSF.Aop.ILRun.exe, BSF.Aop.dll, Mono.Cecil.Pdb.dll, Mono.Cecil.dll.
  2. Настройте скрипт PostBuildEvent.

Среда winform:

Откройте vs → свойства проекта → PostBuildEvent, настройте скрипт запуска aop. Например: xcopy $(OutDir)BSF.Aop.dll $(ProjectDir)packages.BSF.Aop\ /Y call "$(ProjectDir)packages.BSF.Aop\BSF.Aop.ILRun.exe" msgbox $(TargetDir)

Веб-среда:

Откройте vs → свойства проекта → PostBuildEvent, настройте скрипт запуска aop (OpenApi.Test.Web заменить конкретным именем проекта). Например: xcopy $(SolutionDir)\OpenApi.Test.Web\bin\BSF.Aop.dll $(SolutionDir)\OpenApi.Test.Web\packages.BSF.Aop\ /Y call "$(SolutionDir)\OpenApi.Test.Web\packages.BSF.Aop\BSF.Aop.ILRun.exe" msgbox $(SolutionDir)\OpenApi.Test.Web\bin\

Пример использования demo

  1. Пример предварительного и последующего аспектов Aop (подробности см. в проекте BSF.Aop.Test)
public class AroundAopTest
    {
        [MyAroundAop]
        [AttributeInfo(Des = "测试2")]
        public void Method(TempInfo info, out int b,int a=1)
        {
            a = 222;
            b = 3;
            System.Console.WriteLine("Hello world!"+a);
        }
    }

    public static class AroundAopTest2
    {
        [MyAroundAop][AttributeInfo(Des ="测试")]
        public static void Method2(TempInfo info, int a = 1)
        {
            a = 222;
            System.Console.WriteLine("Hello world!" + a);

        }
    }

    public class MyAroundAop : Aop.Attributes.Around.AroundAopAttribute
    {
        public MyAroundAop()
        {
        }


        public override void Before(AroundInfo info)
        {
            var att = info.Method.CustomAttributes.ToList()[0];
            info.Params["a"] = 55;
            System.Console.WriteLine("before" + info.Params["a"]);
        }

        public override void After(AroundInfo info)
        {
            System.Console.WriteLine("after"+ info.Params["a"]);
        }
    }

    public class TempInfo
    {
        public int T1 { get; set; }
    }

    public class AttributeInfo : System.Attribute
    {
        public string Des { get; set; }
    }
  1. Пример INotifyPropertyChanged (подробности см. в проекте BSF.Aop.Test )
[NotifyPropertyChangedAop]
    public class User
    {
        public string Name { get; set; }

        public int Age { get; set; }

        [NoAop]
        public int B { get; set; }
    }

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

.Net — бесплатный open-source, статический Aop вплетается (прямо модифицируя IL промежуточный язык) в структуру, подобно PostSharp (платному); реализует до и после Aop аспекты и внедрение INotifyPropertyChanged. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chejiangyi-BSF.Aop.git
git@api.gitlife.ru:oschina-mirror/chejiangyi-BSF.Aop.git
oschina-mirror
chejiangyi-BSF.Aop
chejiangyi-BSF.Aop
master