2012-03-21 11 views
1

Web Site Projectで定義された型のインスタンスを作成しようとしています。タイプ名は構成可能であるため、既知であるが、ウェブサイトプロジェクトはASP .Netによってコンパイルされるので、アセンブリ名のために構成瞬間に名前を伝えることは不可能である。他のライブラリからWebサイトプロジェクト(App_Code)で定義された型のインスタンスを作成する方法

var typeName = ConfigurationManager.AppSettings["typeName"]; 
var assemblyName = '.. get the assembly name ..'; 

var instance = Activator.CreateInstance(assemblyName, typeName); 
return (IUserCredentials)instance.Unwrap(); 

はこのCreateInstanceオーバーロードを使用するための簡単な方法ですか私はすべてのロードタイプを検索し、名前でそれを見つけるもの?

このコードは、Webサイトプロジェクトで参照されている別のライブラリで使用されています。

答えて

3

App_Codeは、にApp_Codeディレクトリの種類に常駐するタイプを含むアセンブリに割り当てられた名前である:

あなたが知っているタイプのオフアセンブリを得ることについては、ウェブに存在するどのよう
string assemblyName = "App_Code"; 
+0

これはうまくいきますが、理由を説明する気になる人はいますか? –

+1

@ TimBooker、それは単にコンパイラが割り当てた名前で、黒い魔法はありません。 –

0

これは正確な答えではないかもしれませんが、必要なクラスのコードをリンクとして他のプロジェクトに追加し、リフレクションを使用する代わりに直接使用することができます。あなたがする必要がありますので

+0

考えられるのは、そのプロジェクトの外部にそのインターフェイスの実装を持たせることです。 –

0

typeof(MyWellKnownType).Assembly 
+0

クラスが知られておらず、インターフェイスのみが、インターフェイスがそのライブラリのコンシューマによって実装された後、消費者がWebサイトプロジェクトになる –

関連する問題