C#

ASP.NET Web APIのSelf-Hostでテスト

これはOne ASP.NET Advent Calendar 2012の18日目の記事です。 昨日は、karuakunさんでASP.NET 4 WebFormでモバイルサイトを作成する場合のスクリプト結合でした。 はじめに ASP.NET Web APIにはSelf-Hostと呼ばれる機能があります。IISがなくても動くという…

C#でカリー化と部分適用

C#

勉強会で話題になっておもしろかったので、実装してみました。 カリー化 4つの引数まで対応したFuncの拡張メソッド。 public static class FuncCurry { public static Func<T1, Func<T2, TResult>> Curry<T1, T2, TResult>(this Func<T1, T2, TResult> f) { return arg1 => arg2 => f.Invoke(arg1, arg2); } public st</t1,></t1,></t1,>…

部分適用の使いどころ

C#

部分適用というのは、簡単に言ってしまえば、関数の型を変換する方法の1つです。たとえば、Func を Func に変換するとか。部分適用という言葉を使わずとも、これはよく行われていることで、ラムダ式を使って実現されます。わかりやすいように、型を明示して…

C#の非同期プログラミングモデル(APM)をF#のMailboxProcessorに書き換えてみた

C# F#

非同期処理が得意になりたいなぁと思います、最近。プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)の27章にAPM(Asynchronous Programming Model)のいい例が載っていたので、勉強がてらF#のMailboxProcessorに書き換えてみました。 例のプログラム…

Somaの式コメントでオリジナルの関数を使う(C#版)

上の補足。C#でほぼ同じものを書くとこうなります。F#のオプション型を意識していないのが主な違いです。 using System; using System.Collections.Generic; using Soma.Core; namespace ConsoleApplication3 { public class Dialect : MsSqlDialect { publi…

stringの配列からDictionaryへの変換をやってみた

C# F#

なんとなくやってみました。元ネタ http://d.hatena.ne.jp/okazuki/20110611/1307759414 http://gushwell.ldblog.jp/archives/52163460.html C# LINQはワンライナーで書くより変数で受けるのが好みです。 var arr = new[] {"1", "one", "2", "two"}; var key…

Soma 0.7.0.0 のC#サポートについて

Soma 0.7.0.0 で C#(やVB.NET)のサポートを強化しました。このエントリではその点について紹介します。まず、Soma.Core.Dbの全メソッドがオーバーライド可能です。ですので、ちょっとフックしてアプリに共通の機能を入れたりと便利に使えます。 たとえば、…

Soma.Core.DbクラスのQueryOnDemandメソッド

もうひとつ紹介。 QueryOnDemandメソッドは、SQLの実行を遅延し、さらにDbDataReaderを読みながら一件一件結果を返します。大量データを扱うときに便利です。たとえば、Employeeテーブルから全件取得する次のようなコードを見てみます。 var db = new Db(new…

ReSharperのFormatting Style

C#

なぜかこんなフォーマットを使っていました。デフォルトのままなのか自分で変えてこうしたのかは覚えていない。public static void Hoge() { var action = new Action(() => { Console.WriteLine("hoge"); Console.WriteLine("foo"); }); }でも、こうしたほ…

ObjectDataSourceを使ったページング

ステートレスなビジネスロジックが一覧データと件数を同時に返すとき 件数を一時的に保持してObjectDataSourceに渡せるようにビジネスロジックを一時的にラップしてあげるといいかもしれない。 GridViewPage.cs using System.Collections.Generic; using Sys…

任意の型に対してLINQのクエリ式を使用する

C#

知らなかったよ。自分で作った任意の型にクエリ式が使えるんですね。[TestClass] public class LinqTest{ [TestMethod] public void Test() { var source = new Wrapper<int>(100); var wrapper = from n in source where n > 50 select n; Assert.AreEqual(100, </int>…

F#、C#、SQLで直積

Seq.collectやSelectManyが理解しづらいので簡単なコードで整理してみました。 F# [<Test>] let ``cartesian product`` () = let numbers = seq {for i in 1 .. 3 -> i} let results = numbers |> Seq.collect (fun n1 -> numbers |> Seq.map (fun n2 -> n1, n2)) </test>…

F#のパターンマッチとC#のVisitorパターンの比較

パターンマッチグというものを使うとVisitorパターン相当のことが簡単に書けるということを聞いて、関数型プログラミングに興味を持ち始めました。というわけで最近F#をさわったりしています。 で、パターンマッチというものがどういったものかわかってきた…

BindingFlagsのNonPublicについて

NonPublicって親クラスのメンバは対象にならないんですね。ドキュメントを読んでも、そうとはわからないですが。 [TestMethod] public void TestBindigFlags() { var type = typeof(Derived); var flags = BindingFlags.Instance | BindingFlags.Public | Bi…

最近のSoma

ちょっとずつ作っているEntity Framework拡張のO/RマッパーSoma(http://soma.codeplex.com/)ですが、更新系SQLの生成をEntity Frameworkにまかせるのをやめました。マッピングの定義はedmxにあるのでパースして自前でSQLを組み立てることにしました。理由…

名前で動的にプロパティにアクセスする

下の例の2行目のようにプロパティ名で任意のオブジェクトのプロパティに「簡単に」アクセスしたいと思いました。 var value1 = hoge.Aaa; var value2 = hoge["Aaa"]; Assert.AreEqual(value1, value2); 最初、dynamicを使えばすぐできるのかと思ったら無理で…

オーバーライド、オーバーロード、インタフェースの明示的な実装が混ざるとむずかしい

C#

Essential .NET ― 共通言語ランタイムの本質を読んでいるんですが、リスト6-14の例が難しく(ややこしく)てうなってしまいました。 ちょっとだけ変更していますが、大体こんなです。実行結果がすぐにわかる人はすごいです。 class Program { static void Ma…

Javaとおんなじ考えで使うとはまるC#のジェネリクス

C#

クローズ構築型はオープン構築型にアサインできない public class A<T> { } public class B : A<string> { } [TestMethod] public void Test() { Assert.IsFalse(typeof(A<>).IsAssignableFrom(typeof(B))); // Trueになると思いがちだけどFalse } ついついやってしまい</string></t>…

オーバーロードされたジェネリクスなメソッドが使いにくい

C#

そういうルールだといわれるとそれまでなんですが、ジェネリクスなメソッドがオーバーロードされている場合、呼び出すメソッドを決定するルールが不便にかんじます。たとえば次のような3つのクラスがあるとします。ポイントは、BはAのサブクラスだけどCはち…

MEFを使ったXAPのオンデマンドロードとNavigation Frameworkの組み合わせ

Silverlight 4, MEF and MVVM: MEFModules, Dynamic XAP Loading and Navigation Applicationsを参考に、XAPを動的にローディングしつつも画面遷移はNavigation Frameworkをつかって簡単に別XAPのページに移動する方法を試行錯誤してみました(リンク先の例…

WCF RIA Servicesで公開したDTOに対してDataAnnotationでバリデーション

MetadataType属性でメタデータ用のクラスを指定します。メタデータ用のクラスには、Requiredとかバリデーションの属性を指定します。 [MetadataType(typeof(EmployeeMetadata))] public class Employee { [Key] public int Id { get; set; } public string N…

DTOをWCF RIA Servicesで公開するには

http://weblogs.asp.net/fredriknormen/archive/2009/11/28/wcf-ria-services-and-a-guide-to-use-dto-presentation-model.aspx 上のサイトをみながら試行錯誤してみました。Entity Frameworkを使うにしても使わないにしてもDTOに変換してクライアント側(Si…

ReshaperでActionが使えない

ジェネリクスの型パラメータなしのSystem.Actionを使おうとするとReshaperに怒られます。コンパイルは通っているのでReshaperの問題っぽい。 Silverlightのプロジェクトでなければ問題ないんですけどねー。

Silverlight4試してみた

日本語版のVisual Studio 2010だとMicrosoft Silverlight 4 Tools for Visual Studio 2010 RCが対応していないので、Silverlight4を試すには英語版のVisual Studio 2010を使うのがいいみたいです。いったん日本語版入れたんですけど、あきらめてアンインスト…

Domaをベースにした.NET版のDaoフレームワーク

O/RマッパーとしてEntity FrameworkやNHibernateがフィットするアプリは確かにあると思うのですが、そうは言っても多くのアプリやプロジェクトではSQLを中心としたDaoフレームワークのほうが適していると思っています。 そういうわけで、Domaをベースにして.…

登録していないコンポーネントが自動でインスタンス化されるのを防ぐには

上で示した挙動がいやな場合もあるかもしれません。 そのときは、IKernelの実装クラスを作成してそれを使います。具体的にはIKernelのHandleMissingBindingメソッドをオーバーライドしてfalseを返します。 public class MissingBindingDisabledKernel : Stan…

コンポーネント登録をせずにDIしてインターセプタを適用

自動登録という機能があるわけではなく、Kernel(コンテナ)に問い合わせて存在しなかったらインスタンス化したりDIしてくれるようです。これは便利。 それと、IKernelのIntercept拡張メソッドを使うと条件に引っかかるメソッドにインターセプタが適用できま…

xUnit.netを使ってみる 2

C#

他のテストツールとの比較がありますね。 http://xunit.codeplex.com/wikipage?title=Comparisons&referringTitle=Home SetupとTearDownの代わりが、コンストラクタとIDisposable.Disposeというのはおもしろい。 あと気に入ったのは例外のテスト。期待する例…

xUnit.netを使ってみる

C#

NUnitの後継らしいです。 http://www.codeplex.com/xunit Ninjectで使っていたのでちょっと見てみました。たとえばこんな感じで使っています。 [Fact] public void ProviderReturnsConstantValue() { var sword = new Sword(); provider = new ConstantProvi…

属性でインターセプトの対象を示す

usingしておきます。 using Ninject; using Ninject.Extensions.Interception; using Ninject.Extensions.Interception.Attributes; using Ninject.Extensions.Interception.Infrastructure.Language; using Ninject.Extensions.Interception.Request; イン…