[ツール]⇢[拡張機能と更新プログラム]で[Nancy]をインストールしてVisualStudioを再起動する。
2.環境設定
管理者権限で起動したDosプロンプトで下記コマンドを実行。
netsh http add urlacl url=http://+:3579/ user=ユーザー名
3.プロジェクト作成
プロジェクト作成⇢C#⇢Web⇢Nancy SelfHosting を選択。
最初エラーがでるが、プロジェクトを保存してビルド&実行すると
初回のみNugetがNancyをダウンロード、その後実行開始する。
4.動作確認
ブラウザでhttp://localhost:3579/ にアクセスする。
Nancy画像が表示されれば成功。
~~~~~~ここからNancyフレームワークを読み解く~~~~~~
ソリューションエクスプローラーのフォルダ構成
・NancyApplication1
⇢Content メディアファイル
nancy-logo.png
⇢Views テンプレート(Html)
index.sshtml
Bootstrapper.cs よくわかってない https://github.com/NancyFx/Nancy/wiki/Bootstrapper
IndexModule.cs ルーター機能搭載したコントローラー部
Programs.cs セルフサーバーを起動するメイン関数
個々の説明
Content/Views
コンテンツとテンプレート部分は、様々なテンプレートエンジンが用意されてるのでそれを利用するか、HTML5なページをそのまま構築していくかは自由。
IndexModule.cs
djangoでいうurls.py、views.pyを併せ持つ存在。
NancyModule
ベースクラス内部がシングルトンになっているのかな。コンストラクタ内部でURLメソッドの定義を行っておくと、すべてがリンクする仕組み。つまり粒度を最小単位1ページ1クラスというような構成にしてもNancyModuleを継承さえすればrouter周りの事は初回コンストラクタ生成時に自動でやってくれる。
Programs.cs
ここは特に弄る必要はなさそうだ。
ここまでをまとめると、WEBページがアクセスされたらPrograms.csで宣言したセルフサーバーが受けて、NancyModuleを継承してるクラスを総当りで検索して該当するURLのアクションを呼び出す。
その次、
該当するNancyModuleを継承したクラスが呼び出されたら何ができるかというのは
NancyModuleのメタデータの中身を見なくてはいけなくて、
public AfterPipeline After { get; set; }
public BeforePipeline Before { get; set; }
public NancyContext Context { get; set; }
public NancyModule.RouteBuilder Delete { get; }
public NancyModule.RouteBuilder Get { get; }
public IModelBinderLocator ModelBinderLocator { get; set; }
public virtual ModelValidationResult ModelValidationResult { get; set; }
public string ModulePath { get; }
public Negotiator Negotiate { get; }
public ErrorPipeline OnError { get; set; }
public NancyModule.RouteBuilder Options { get; }
public NancyModule.RouteBuilder Patch { get; }
public NancyModule.RouteBuilder Post { get; }
public NancyModule.RouteBuilder Put { get; }
public virtual Request Request { get; set; }
public IResponseFormatter Response { get; set; }
public virtual IEnumerable
public ISession Session { get; }
public IModelValidatorLocator ValidatorLocator { get; set; }
public NancyModule.ViewRenderer View { get; }
public dynamic ViewBag { get; }
public IViewFactory ViewFactory { get; set; }
public class RouteBuilder : IHideObjectMembers
public class ViewRenderer : IHideObjectMembers
茶色がRequest :入力
赤字がURLメソッド :処理
青字がページデータ :出力
基本的な実装作法は見えた気がする。
該当URLのメソッドが呼び出され、引数はRequestで受け取ってビジネスロジックが動作した後Viewでテンプレート呼び出し。
まとめると、
・公式ページにNancyは超軽量フレームワークっていうのは本当ぽい。
・新規プロジェクトを作ったらセルフサーバーが出来上がる。
・Moduleは沢山あっても良い。
・新規ページを追加するときはルートを気にせずに新規クラスを作るだけの軽い感覚で。
・ページレイアウトは自分の使いやすいものが使える。
・初見でNancyはURLのルーティグしかやってないでしょってくらいな軽量具合。
・DBは自前で用意しないといけないのかって思うと気が重くなる。
・Djangoを知ってると管理ページもついてくるDjangoがいいって騒ぎたくなる。
・最後にC#でかけるから実行速度に期待できそうなのでよしとする。
0 件のコメント:
コメントを投稿