コードの一部をリファクタリングしようとしていますが、考えられるオプションが不足しています。
これは私が持っていた元のコードです:
if (WebConfigSettings.ComPartition == null && HttpContext.Current != null)
Nses = new NSession();
else
Nses = (INSession)Marshal.BindToMoniker(string.Format("partition:{0}/new:NuntioServer.NSession", WebConfigSettings.ComPartition));
と
if (WebConfigSettings.ComPartition == null && HttpContext.Current != null)
apses.Wses = new WSession();
else
apses.Wses = (IWSession)Marshal.BindToMoniker(string.Format("partition:{0}/new:NuntioServer.WSession", WebConfigSettings.ComPartition));
そして、これは私がそれをリファクタリングしようとしている方法です:
(はい、C# ではインターフェイスをインスタンス化 できます。)
public static TInterface Get<TSubInterface, TInterface>() where TSubInterface: TInterface
{
<snip></snip>
if (!useComPartitions)
return Activator.CreateInstance<TSubInterface>(); // --> this is not cooperating
return (TInterface)Marshal.BindToMoniker(.....);
}
これが私がすでに試したことです:
new() 制約を指定してから 'new TSubInterface()' を実行しようとしました: これによりビルド エラーが発生します。 ' ジェネリック型またはメソッドで.."
Activator.CreateInstance を使用すると、「インターフェイスのインスタンスを作成できません」という実行時例外が発生します。
Activator.CreateComInstanceFrom("someAssemblyName", "typeName") を使用すると、次のコンパイル エラーが発生します。
[編集] 'where TSubInterface : class を追加することでこれをコンパイルできましたが、TSubInterface はインターフェイスであるため、それが意味があるかどうかはわかりません。
CreateComInstanceFrom の使用も機能しません。これは、その dll が存在しないディレクトリで指定されているアセンブリを検索しようとしているためです。
どうにかしてこれをコンパイルして実行できますか?