2011-10-26 11 views
0

私は常にC &です。LinqPadとVSの間には何かがあります。そして、私は、トランジションを可能な限りきれいにしたいだけです。LinqPad:クラス内のObjectContextを直接参照しています

LinqPadでは、main関数またはカスタム関数内のObjectContextを直接参照できます。しかし、そこにクラスを含めると、そのクラスの関数/メソッド内のObjectContextを直接参照することはできません。あなたが行うことができます

一つはこれです:

class MyClass{ 

    ISessionTable<Category> Categories; 

    public MyClass(ISessionTable<Category> categories){ 
     Categories = categories; 
    } 

    public void MyClassFunction(){ 
     Categories.Count().Dump(); 
    } 
} 

は、これを行うのいずれかの他の滑らかな印象の方法はありますか?上記のように、VSでどのようにコーディングしなければならないのかを指定します。これは、可能な場合は避けたいものです。

UPDATE:私の非LinqPad C#コードで

、私はいつもちょうど様々な理由のためにクラスにObjectContextにして渡すことはできません。だから私の質問のために具体的には、クラスに渡さずに、 "カテゴリ"(上記の例に従います)にアクセスする方法はありますか?言い換えれば、何らかのグローバルなアクセス方法がありますか?

+0

「neater」を定義します。このアプローチについてあなたが気に入っていないのは何ですか?これは、私に依存性注入のかなり良い例のように見えます。 – StriplingWarrior

+0

"実際のコード"でデバッグ/オブジェクト状態を吐き出すための "きちんとしたやり方"はありませんか?ちょうど無関係な 'Dump()'でしたか? :)拡張メソッドは、それを効果的なNOPにするか、またはログに送信するように常に定義できますが、... ick。 –

+0

LinqPadとVSの間の移植にはリファクタリングの量を減らすという意味で "Neater"が必要です。私はそれが本当に人々のニーズに固有だと思います。そして、ダンプ()は何もしていません。 – Dave

答えて

0

私は、デザインアプローチによってこの問題を回避する方法を考え出しました。

自分のワークフローやLinqPadを使用する理由を明確にしてください。私はLinqPadを使ってクラスをテストしています。それらの多くはデータベースにアクセスする必要があります。 LinqPadとVSの間にコードを移植するときに必要なリファクタリングの量を減らすことを試みています。コードのコピーと貼り付け(クラス全体)はリファクタリングより時間がかかりません。だから、できるだけ正確になるように2つのバージョンのコードを保つようにしています。

私が思いついた解決策は、ObjectContextを保持するために第3の任意のクラスを使用することです。次いでLinqPadにクラスをテストするために、次のコードを含むであろう:このよう

void Main() 
{ 
    DB.Categories = Categories; 

    MyAwesomeClass awesomeness = new MyAwesomeClass(); 
    awesomeness.DumpNumOfCategories(); 
} 

class MyAwesomeClass { 

    public MyAwesomeClass(){ 

    } 

    public void DumpNumOfCategories(){ 
     DB.Categories.Count().Dump(); 
    } 

} 

class DB{ 
    public static ISessionTable<Category> Categories { get; set; } 
} 

を、試験中のクラス(例えばMyAwesomeClass)はLinqPadとVSバージョンの両方で同じに保つことができます。リファクタリングがなくなり、クラスコンストラクタを汚染することもなくなりました。クラスDBには2つの異なるバージョンが必要ですが、一度実装すると変更する必要はありません。

関連する問題