C#
ちょっとRSSを生成したくて仕様を調べていたんだけど、バージョンが色々あってどれを使ったらいいのかさっぱりわからない。仕方がないので、はてなが配信しているRSSをテンプレートにすることにした。最初はDOMでやろうかと思ったけど、面倒くさかったのでテ…
前回 の続きです。 宣言的インジェクション アプリケーションでよく必要になる処理でロギング処理というのがあります。.NETでロギング処理を行う場合、Traceクラスを使うこともありますが通常、log4netなどのロギングライブラリを使用することになるでしょう…
前回 までで、Spring.NETの基本的な機能について説明しました。 他にも様々な機能が用意されていますが、基本的に使用するのはobject要素とproperty要素の二つだけです。これだけを見るとSpring.NETというのはコードの中のnew宣言とプロパティ呼び出しを設定…
前回 では、フォームをDI コンテナに登録し、それを取り出して表示しました。今回はもう少し踏み込んでみます。まずはMainFormクラスのUIを以下のように変更します。 MainForm.cs テキストボックスをMultiline=true で貼り付け、[File] → [Save] というメニ…
それでは実際にSpring.NET を使ってみます。まずは以下のサイトから最新のバイナリをダウンロードしてきます。現在のバージョンは1.1 です。 Spring.NET - Application FrameworkダウンロードしたSpring.NET-1.1.zip を解凍するとできるフォルダの中の「bin\…
前回 ではクラス間の依存関係の切り離し方とSpring.NETの役割について説明しました。 では、そもそもクラス間の依存関係を切り離す事にどのような利点があるのでしょうか?インターフェースで分離する事による利点でよく言われるのは多態性(ポリモーフィズ…
なんかいまいちSpring.NETの認知度というか使用率が低いみたいなので、ここらで一度Spring.NETを知ってもらうために入門的なエントリでも書いてみることにする。 普段当たり前のように使っているので、今一度何故使うのかという事を考えてみたいというのもあ…
2008-01-27 - 当面C#と.NETな記録 で紹介されていた次期C#の新機能(候補なのかな?)そのサンプルコードが↓これ static void Main(string[] args) { dynamic { object myDynamicObject = GetDynamicObject(); myDynamicObject.SomeMethod(); // call a meth…
前回途中で終わったParseExpressionメソッドを実装した。その前にそもそも何がしたいかというと、XlsWorksheetsクラスではワークシートを列挙する時、以下のようにWorksheetオブジェクトをラップしたXlsWorksheetクラスをインスタンス化して返していた。 for…
色々調べていてやっとこさ仕組みがわかってきたので、少し進める。まず、XlsWorksheetsクラスをIQueryProviderインターフェースを実装するように変更する。 XlsWorksheets.cs using System; using System.Linq; using System.Linq.Expressions; using System…
こんな処理があるとする。 static void Main() { var shared = "なんか"; var array = new [] { "100", "200" }; foreach(var s in array) { // shared と s を使って処理する。 } } このループ部分の処理が少しばかり複雑になったとして、この部分をメソッ…
対象とするExcelのバージョンはOffice 2003。事前にTlbimp.exeを使ってExcel.exeからRCWを作っておく。アセンブリ名はExcel.Interop、名前空間もExcel.Interopとしておく。まずはシートを列挙する機能から作る。クラス構造はだいたい↓こんな感じ XlsWorkbook…
いまいち、まだLINQの仕組みがよくわからない。whereやselectなどの演算子が対応する拡張メソッドにマップされたりするのはわかるけど、その式がどうやって(どこで?)SQLやらXPath(かどうかは知らないけど)やらに変換されているのかがわからない。じゃあ…
例えば以下のようなExcel、Word、PowerPointのファイル名の配列があるとする。 var fileNames = new [] { "200.xls", "100.doc", "300.ppt", "500.xls", "400.ppt", "600.ppt" }; この配列から格拡張子毎にリストに分けたいとする。Outputとして欲しいのは以…
VS2008からインテリセンスの候補リストを表示している時にCtrlキーを押すと候補リストが半透明になる。この機能を自分のアプリケーションでも使いたくなったので作ってみたら案外簡単にできたので、この機能を再利用可能なコンポーネントにまとめてみた。 Op…
C#3.0の匿名クラスってプロパティしか定義できないけど、プロパティの型をDelegateにすればメソッドみたいに振る舞うプロパティを定義できる事に気が付いた。 class Program { static void Main(string[] args) { var obj = new { Greet=(Func<string, string>)((name) => "H</string,>…
Code Craftを読んでいたら防御的プログラミングについての記述があったので、自分が普段やっている防御的プログラミングについて書いてみる。まずCode Craftで述べられている防御的プログラミングとは Code Craft P7 より 注意深く慎重を期したプログラミン…
最近オープンソースで作り始めた拙作のSpring.Extensionsライブラリ。以下のエントリで書いたコードを元にして作り始めたのだが、 Spring.NETでカスタム属性を使ったインジェクションを実現する - Architect Lifeこの機能を実装したら他に実装したい機能が思…
ある型Aからある型Bへの変換をする処理を書く時にはよくTypeConverter型を継承して型コンバータを書いている。型コンバータの利点は、.NET標準の機構であるというのもあるけど、変換元の型にカスタム属性で型コンバータを関連付ければ、 ↓こんな風に TypeCon…
MVCフレームワークの調べ物はまだ途中だけど、ちょっと脱線してSpring.NETとの連携を考えてみる。Spring.NET自体はASP.NETに対応していてWebフォームへのインジェクションを実現している。しかしMVCフレームワークではWebフォームの役割は純粋なビュー(表示…
前回はページの表示のみだったので、次はURLにクエリを渡してみる。単純に「Home/Index」というURLに対して、「message」というクエリ名で値を渡すとする。普通ならこのクエリの値はHttpRequestのQueryStringプロパティで取得するが、ASP.NET MVC Framework…
とあるCOMアプリケーションをラップするライブラリをC#で開発している。COMアプリケーションを扱うにはもちろんTlbimp.exeを使いRCWのアセンブリを生成し、それを参照するわけだが、このCOMアプリケーションには複数のバージョンが存在し(例えば2005、2006…
最近TurboGearsをさわっていて、URLをコントローラクラスのメソッドにマップするというシンプルなアーキテクチャがすごく直感的で、すごい生産性が高くて衝撃を受けた。同じMVCパターンにしてもJavaのStrutsとPythonのTurboGearsでここまで違うのかと、設定…
Spring.NET 1.1がリリースされたので、さっそく気になる機能をさわってみる。 まずはSpring.NET Web Frameworkから。これはASP.NETでMVCパターンを使った開発をできるようにするもの。具体的には画面遷移の部分、いわゆるコントローラの部分が抽象化されてい…
PowerShellのコレクションに対して-eq演算子で比較すると不可解な結果が返ってきてずっと頭をかしげていた。 PS > $a = @(1,2,3,4,5) PS > $a -eq 2 2なんて比較をするとbool値じゃなくて比較した右オペランドの値と同じ値が返ってくる。この挙動の意味がさ…
「Runspace」というクラスについてわかった事。例えば、以下のように「RunspaceInvoke」だけで変数を宣言して、その変数を出力する。 var pshEngine = new RunspaceInvoke(); pshEngine.Invoke("$global:msg = \"Hello\""); var psObjects = pshEngine.Invok…
C#からPowerShellスクリプトを呼び出す方法を調べてみる。開発環境にはVisualC# 2008 Expressを使う。前提条件として「System.Management.Automation.dll」を参照していることと、以下の名前空間をusingしていること。 using System.Management.Automation; …
Spring.NETは非常に便利だが、プログラムがある程度の規模になってくると設定ファイルがかなり膨らんでくる。カスタムパーサーなどを使って記述量を減らしたりはできるが、たかがしれている。コンテナに登録するオブジェクトが少量でも、いちいち設定ファイ…
今までチャットアプリケーションを作った事が無かったので、ためしに作ってみた。 .NETでこういうクライアント⇔サーバー間で通信をするアプリケーションを作る場合、.NET Remotingを使うのが普通。いまさらソケット開いて、がちゃがちゃリスニングしたりする…
なんて事を最近会社に派遣されてきたC#初心者に聞かれたので、その理由をここに書いてみる。聞かれた事は、 class MyForm : System.Windows.Forms.Form { private void MyForm_Load(object sender, EventArgs e) { // DoSomething } } ではなくて class MyFo…