タグ

2014年9月23日のブックマーク (16件)

  • DIContainer with AOP顛末 まとめ - Kazzz's diary

    .NETのDIContainerにおけるAOPの実装に関してここしばらくすったもんだしていたのですが結果としてはRealProxyを使用したAOP実装が現状の.NETにおいては使いやすさと制約(制限)とのバランスが最も取れているという結論に達しました。 公開されているものも含めて現在の.NETプラットホームで可能なAOP実装の手法は以下の3つに分類されます。 (実際に使用されているものも含めて殆どの.NETのAOP実装を見ましたが全て以下に分類されると考えています) ・ContextBoundObjectとContextAttribute属性を利用する(Annotation 方式) ・ReflectionとMSILのEmitionによる型の動的な生成を利用する(TypeEmition 方式) ・Realproxy派生クラスによるメソッドインターセプションを利用する(Proxy 方式) An

    DIContainer with AOP顛末 まとめ - Kazzz's diary
    mitsu1986
    mitsu1986 2014/09/23
  • Break Free of Code Deadlocks in Critical Sections Under Windows

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. Contexts in .NET Decouple Components by Injecting Custom Services into Your Object's Interception Chain Juval Lowy Code download available at:ContextsinNET.exe(326 KB) This article assumes you're familiar with the .NET Framework and C# Level of Difficult

    Break Free of Code Deadlocks in Critical Sections Under Windows
    mitsu1986
    mitsu1986 2014/09/23
  • C# の素晴らしさを語る会 で喋ってきました。 - 亀岡的プログラマ日記

    F#C# の素晴らしさを語る会 で喋ってきました。 - C#の素晴らしさを語る会 - VSハッカソン倶楽部 | Doorkeeper C#の話をしていないじゃないか、と評判でしたが。 スライド C#とaop from Hiroshi Maekawa コード PropertyChangedの部分だけ、一応載せておきますね。 PersonViewModel.csがビルド時にPersonViewModel.Modified.csにモジュールレベルで変換される、というのがポイントですね。 いい忘れたこと 今回の勉強会、結構初心者のかたも来られていたらしく、その割にはちょいとばかりハードな内容だったかもしれません。 でも、発表の冒頭で言ったように、「なんかよくわからないけれど、こういう技術を使えばこんなことができるらしい」というイメージだけでも、できるだけ多く拾ってもらえればと思っています。 僕の尊

    C# の素晴らしさを語る会 で喋ってきました。 - 亀岡的プログラマ日記
    mitsu1986
    mitsu1986 2014/09/23
  • SSCLI2.0 ビルド戦記 - Battle Against Makefile -

    Win XP(x86) + VS2008 でビルドしようなんて思うから…。 アンマネージ API を使いたい時に困るのがサンプルコードの探しにくさ。日語の情報はもちろん絶望的だし、家 MSDN にあるリファレンス も、I/F の簡単な説明しかない…。まずは、"Hello, world!!" から始めたくても、一連の流れがわかるのは .NET Framework SDK Version 1.1 についてくる Metadata Dump Utility や SMC - Simple Managed Compiler Sample が、唯一の頼みの綱という状態。…かと言って、これらでも全ての API 網羅してるわけではないわけで。 発端は、SMC のコードを追っていて。 SMC って、MethodBody の RVA についての計算と領域の確保を手動でやってるんです。あれ?アンマネージ AP

    SSCLI2.0 ビルド戦記 - Battle Against Makefile -
    mitsu1986
    mitsu1986 2014/09/23
  • 11 年目の "Hello World!" - Basics of CLI begun with 11th year -

    .NET開発者向けツール開発な話題が増えるといいな。 拙い英語力は技術力でカバー!・・・とか言ってみたいところですが、そうも行かず。かと言って、先週末受けた TOEIC は悲壮感が漂う始末...( = =) CLI が世に出て 11 年が経とうというのに、この辺りの情報は相変わらず日語の情報が絶望的な状態。まあ嘆いても仕方がないので、前回に引き続きアンマネージ API です。まずはまずは "Hello World!" をををををと調べ続けた結果をご報告いたします。 ECMA C# and Common Language Infrastructure Standards にある CLI の仕様書、Common Language Infrastructure (CLI) Partition II: Metadata Definition and Semantics を読み解き、バイナリを解析

    11 年目の "Hello World!" - Basics of CLI begun with 11th year -
    mitsu1986
    mitsu1986 2014/09/23
  • プロファイル API について

    更新 : 2007 年 11 月 プロファイラは、別のアプリケーションの実行を監視するツールです。共通言語ランタイム (CLR: Common Language Runtime) プロファイラは、プロファイル API を使用して CLR とのメッセージの送受信を行う関数で構成されるダイナミック リンク ライブラリ (DLL: Dynamic Link Library) です。プロファイラ DLL は、実行時に CLR によって読み込まれます。 従来のプロファイリング ツールは、アプリケーションの実行を測定することに重点を置いていました。その主な役割は、各関数の実行にかかる時間やアプリケーションのメモリ使用状況を一定期間にわたって測定することでした。プロファイル API は、コード カバレッジ ユーティリティや高度なデバッグ支援ツールなど、より幅広い診断ツールを対象にしています。これらの用途

    プロファイル API について
    mitsu1986
    mitsu1986 2014/09/23
  • 続・C# 動的メソッド入れ替え - Sequel: Apply a monkey patch to any static languages on CLR -

    申し訳程度の C# 要素です (>_<) @urasandesu こと、杉浦と申します。はじめましての方ははじめまして! C# Advent Calendar 2011 の 13 日目を担当させていただくことになりました。よろしくお願いいたします。 ネタは、.NET 開発の中でも日の当たりにくい低レイヤな部分、「アンマネージ API」を取り上げます。 タイトルにもある通り「C# で動的にメソッドを入れ替える」という、マネージコードだけではなかなか実現できないことをやってみることにします。また、元々日語になっている資料やサンプルコードが少ない分野ですので、これからコンパイラやプロファイラなどをやってみたい方の学習の一助として、もしくはどんなものかちょっと覗いてみたい方への参考になればと思う次第です。 ちなみに、私の Blog のこの記事やこの記事辺りの続編となりますので、もし興味がありまし

    続・C# 動的メソッド入れ替え - Sequel: Apply a monkey patch to any static languages on CLR -
    mitsu1986
    mitsu1986 2014/09/23
    “うらぶろぐ @urasandesu: 続・C# 動的メソッド入れ替え - Sequel: Apply a monkey patch to any static languages on CLR -”
  • C# 動的メソッド入れ替え - Apply a monkey patch to any static languages on CLR -

    たまにはこんな、手品の話も。 会社の飲み会の時のネタとしては使えないですが、仕事では使えること請け合いです! (`・ω・´) 手元にコンパイル済みの dll/exe があるとき、その振る舞いを実行時にだけ変えてみたいってことがしばしばあるかと。例えば、以下のようなシチュエーションが思いつきます・・・というか実際ありました (^_^;) ドキュメントが不十分で挙動がよくわからない。調査するために、デバッグプリントを仕込みたい。 特定の条件になると内部で例外がスローされちゃう。どうもバグみたいなので、修正したいけどソースコードがない。 パラメータを変化させながらタイミングを調整したい。開発効率を上げるために、動的言語と連携するような仕組みを一時的に入れ込みたい。 外部機器やネットワーク、DB に依存してて自動テストがしにくい。テスト中はスタブに入れ替えたい。 RubyPython みたい

    mitsu1986
    mitsu1986 2014/09/23
  • IL EmitによるAOP (4) - Kazzz's diary

    s2dotnetでのAOPを実現する機能の概略に関してもう一度書いてみます。 1.定義されたアスペクト、アドバイスからそれぞれのオブジェクトを生成する 2.アスペクトの適用対象となる型の全てのメッセージをインターセプトする 3.メッセージをインターセプトした際にアスペクトのアドバイス、ポイントカットを評価する 4.アドバイス自身を実行する 5.必要であれば元々の型のメッセージを実行する s2dotnetではAopProxyクラスが中心になってこれらの機能を実現していると既に書きました。一方CodeProjectの記事「Dynamic Proxy Creation Using C# Emit」ではAOPに関してはまるきり触れていませんでしたが今までのエントリでも解説してきたIProxyInvocationHandlerインタフェースの実装クラスは実は上記機能の中の2.と5.の機能を既に実現し

    IL EmitによるAOP (4) - Kazzz's diary
    mitsu1986
    mitsu1986 2014/09/23
  • AppVeyorを使ってCI環境構築してみた - 亀岡的プログラマ日記

    艦これビューアで。 posaunehm/KanColleViewer .NET用のCIサービス、AppVeyor てなわけで、AppVeyorです。 元はといえば、このツイートでして。 @Grabacr07 @Posaune appveyor にしましょう。OSSなら無料— たなか@開幕勝利 (@tanaka_733) 2014, 4月 28 流れとしては Grabacrせんせー自動ビルドを願う(多分) 僕がJenkinsを建てようとする tanaka_733せんせーに止められる はい、僕が悪いです。 それはともかくとして。 AppVeyorってのは、ざっくり言うと、.NET用のTravisCIです。もっとざっくり言うとクラウド上におわします執事さんです。いや、Jenkinsではないんですけどね。 Continuous Integration and Deployment service

    AppVeyorを使ってCI環境構築してみた - 亀岡的プログラマ日記
    mitsu1986
    mitsu1986 2014/09/23
  • はてなブログ | 無料ブログを作成しよう

    ハリイカの焼売と中華炒め ハリイカをよく、見かけるようになりましたよ。生け簀で、泳いでいたものを一杯購入しました 立派な大きな墨袋や肝は冷凍保存して 柔らかな身は季節のお豆、お野菜と合わせて中華の炒めものに。新鮮なにんにくの茎は刻み、香り高く欲そそられますね 下足はミンチにし…

    はてなブログ | 無料ブログを作成しよう
    mitsu1986
    mitsu1986 2014/09/23
  • 素の .NET で Aspect 指向したくてがんばってみた。 - 技術をかじる猫

    C# の .NET でアスペクト指向がしたくて根性出してみた。 あぁ、Python ならデコレータで一発なのに、、、、とかやってて思った。*1 実装方法的には、RealProxy 噛ませば、メソッドコールを基すべて横取りできる。 で、RealProxy ラップすると、GetTransparentProxy()拾ってこないと処理できない。 SampleTarget target = new SampleTarget(); RealProxy sample = new SampleProxy(target, target.GetType()); target = (SampleTarget)sample.GetTransparentProxy(); 美しくはないので、Attribute かけといて、インスタンス化したときに自動適用する。 まずは、呼び出し元。 class Program {

    素の .NET で Aspect 指向したくてがんばってみた。 - 技術をかじる猫
    mitsu1986
    mitsu1986 2014/09/23
  • RealProxyの限界 - Kazzz's diary

    以前、日記でRealProxyをAOPのプロキシとして使う実装について言及してきましたが私が考えているシステムとフレームワーク上では以下の不都合が発生しており限界を感じています。 コンストラクタはインターセプトできない AOPのプロキシはRealProxyの派生クラスとして書きますが対象となる型のメソッドをインターセプトしてアスペクトのアドバイスを実行するためには対象のインスタンス自体をセットしなくてはなりません。 public AopProxy(Type type, object target, IAspect[] aspects) : base(type) { this.type = type; this.target = target; this.aspects = aspects; } インスタンスをセットするということは既に生成は完了しているのですから生成する際に使用されたコンス

    RealProxyの限界 - Kazzz's diary
    mitsu1986
    mitsu1986 2014/09/23
  • もうちょっとDynamic Proxyの原理を理解しようとしてみる。あるいはMSDN探検隊。 - 亀岡的プログラマ日記

    mitsu1986
    mitsu1986 2014/09/23
  • Dynamic Proxy Classの原理 - 亀岡的プログラマ日記

    mitsu1986
    mitsu1986 2014/09/23
  • 2004-10-24

    やるべきことの目星は付きました。 IContextAttribute の実装 IMessageSink の実装(メソッドのロギング) IMessageSink の提供 これぐらいですね。 ContextAttribute クラスは IContextAttribute だけでなく、IContextProperty の面倒もみてくれていますが、おそらく、一般的な実装を提供してくれているので、そのまま ContextAttribute を利用してみます。 ContextAttribute クラスのコンストラクタは名前を要求してくるので、"MethodLogger" を指定して呼び出してみましょう。 [AttributeUsage(AttributeTarget.Class)] public class MethodLoggerAttribute : ContextAttribute { publ

    2004-10-24
    mitsu1986
    mitsu1986 2014/09/23