私はしばしば私がよく使うクラスと機能を持つ「mini SDK」を開発しています。他のアセンブリからのインターフェイス実装を正しい方法でインスタンシエート
私は他のアセンブリで実装できるいくつかのインターフェイスを作った。
だから、基本的に次のようになります。
// In SDK.dll:
namespace MySDK
{
public interface IExample
{
/* .. */
}
}
// In another assembly:
namespace Example
{
public class Implementation : MySDK.IExample
{
/* .. */
}
}
これは問題ありません。これは動作しません
// in SDK.dll
private IExample GetImplementation(string fileName)
{
Type implementation = Assembly
.LoadFrom(fileName)
.GetExportedTypes()
.Where(t =>
t.GetInterface(typeof(IExample).FullName) != null
&& (t.Attributes & TypeAttributes.Abstract) != TypeAttributes.Abstract)
.FirstOrDefault();
if(implementation != null)
{
return (IExample)Activator.CreateInstance(implementation);
}
else
{
return null;
}
}
は私がそれを望むもの:私の問題は、SDKには、私は、このインターフェイスの実際の実装を使用したいので、私がやったことはこれです、ですしかし、それは本当に醜いとにかく間違って見えます。
私はこれを行うには正しい/最善の方法か、が良い方法であるかどうかわかりません。
"SDKでこのインターフェースの実際の実装を使用したいのですが"なぜですか?それは後ろに見える。 _other_インターフェイスを使用するアプリケーションで実装が定義されていない場合はどうなりますか? SDKがパラメータやプロパティを持っていれば、他のDLLがインプリメンテーションで_パスすることができるように思えます。 –
さて、なぜあなたはまだこのアプローチを試していないのだろうと思います。私はそれを試してみましょう;) – Stefan