とT
から継承するダースのタイプを言いました。私は一般的な次のインターフェイスを持っていますEntityObject
IDataObject
IDataManager<T> where T : EntityObject, IDataObject ...
データマネージャーの基本クラスもあります
BaseDataManager<T> : IDataManager<T> where T : EntityObject, IDataObject ....
そして私は特定のクラスを持っています
public class Result : EntityObject, IDataObject ....
public class ResultDataManager : BaseDataManager<Result> ...
IDataManager<T>
のインスタンスを返すサービスロケーターを実装したいT
しかし、私は多くのキャストなしでそれをきちんと実装する方法に固執しました。
何か案は?
更新:以前のサービスロケーターでそれらを登録するためのタイプを検出するために、次のコードを使用していました:
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (type.GetInterface("ISQLDataAccessManager") != null && !type.IsAbstract)
{
var manager = (ISQLDataAccessManager)Activator.CreateInstance(type);
_managers.Add(type, manager);
var typeDO = manager.GetDataObjectType();
_typeNames2Types.Add(typeDO.FullName, typeDO);
_managers2BO.Add(typeDO, manager);
}
}
ジェネリックでのリフレクションがよくわからないようです