2017-10-23 12 views
2

コードの背後にある(私は知っている..)特定のインターフェイスを実装するタイプのリストを作成しようとしている。タイプはウェブサイトのプロジェクトapp_codeフォルダ内にあります。.Netウェブサイトプロジェクトですべてのapp_codeタイプを反復するC#

ウェブサイトプロジェクトは複数のアセンブリに動的にコンパイルされます。これは、たとえばAssembly.GetCurrentlyExecutingAssembly()などの呼び出しを意味します。 GetType().Assemblyは私が探しているタイプが含まれていません。 AppDomain.CurrentDomain.GetAssemblies()のスレッジハンマーアプローチを使用したウォルナットを除いて、ウェブサイトプロジェクト内で定義されたタイプのみを反復するいくつかの方法がありますか?

もちろん、この機能をすべて別のプロジェクトに移動して、より予測可能な動作をすることができますが、それは現時点では余りにもリファクタリングです。

+0

私はあなたがすべてのアセンブリを反復処理するよりも、他の多くの選択肢を持っていないと思います。 – DavidG

+0

app_codeフォルダの下にあるすべてのクラスは、同じアセンブリにコンパイルされます。なぜあなたは 'typeof(SOME_KNOWN_TYPE_FROM_APP_CODE).Assembly'を使っていないのですか? –

答えて

1

コードビハインドファイルから、次のコード行を実行して、app_codeフォルダの下のクラスからコンパイルされた型だけを列挙できるようにする必要があります。

IViusalizationManagerはApp_Codeフォルダーの下のクラスの一つであると仮定すると:

Type[] app_codeTypeList = typeof(IViusalizationManager).Assembly.GetTypes(); 
+0

ビルド時にコードビハインドファイルはコンパイルされていませんか? app_codeは後でコンパイルされますか?もしそうなら、あなたは 'IVisualizationManager'(または他のタイプ)を含むアセンブリをどのように参照するつもりですか? –

+0

これは「Webアプリケーション」プロジェクトではなく、「Webサイト」プロジェクトです。 Webサイトプロジェクトの場合、いつ展開するかは、選択した展開戦略に依存します。あなたが何もコンパイルせずにapp_code/*。cs、aspx、aspx.cs ascxなどのファイルをサーバーにコピーすると、app_code(およびglobal.asax)は最初の要求に従い、要求されたページと依存するコントロール初めて要求されたときにもコンパイルされます。 –

+0

あなたのWebサイトを公開することができます。その場合、ページ、コントロール(ascxファイル)、app_code、global.asaxなどは(コンパイル前の選択に応じて)事前コンパイルされますがOPが望んでいるのは、特定のインタフェースを実装するかどうかのためにapp_codeからコンパイルされた型をテストすることです。したがって、アセンブリをそのまま取得できます。 –