特定の名前空間を検索し、指定されたインターフェイスを実装し、指定された基本クラスを持つすべてのクラスのインスタンスを返そうとしています。
ここにコードがあります
private List<T> GetInstancesWithInterface<T, T2>(string @namespace)
{
var tList = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.Namespace == @namespace)
.Where(t => t.BaseType == (typeof (T)) && t.GetInterfaces().Contains(typeof(T2)))
.Select(t => (T)Activator.CreateInstance(typeof(T), this))
.ToList();
return tList;
}
そして、ここに呼び出しコードがあります
var examples = GetInstancesWithInterface<DrawableGameComponent, IResettable>("GamePhysics.Physics");
foreach (var example in examples)
{
Debug.Assert(example is IResettable);
var r = example as IResettable;
_examples.Add(r);
Components.Add(example);
if (Components.Count == 0) continue;
example.Enabled = false;
example.Visible = false;
}
私が抱えている問題は、コードが常にnullを返すようDrawableGameComponent
に処理できないリストを取得するため、Assertが失敗することです。IResettable
var r = example as IResettable
追加情報
インターフェイスDrawableGameComponent
を実装していないことにも言及する必要がありました。IResettable
私が取得しようとしている 3 つのサンプル クラスはすべてDrawableGameComponent
基本クラスとしてあり、実装もしていますIResettable
。
追加の考え
Example
おそらく、実装DrawableGameComponent
と呼ばれる新しい抽象クラスを作成する必要があると考えていました。そうすればIResettable
、具体的な例のクラスはExample
基本クラスを実装できます。これはより良い設計かもしれないと思いますが、そのまま機能させることができるかどうかも知りたいです.