Я пытаюсь динамически создать экземпляр типа, который наследуется от общего interface
.
Например, у меня есть следующий базовый интерфейс, из которого получены несколько других интерфейсов:
public interface IDummy { }
И у меня есть два производных интерфейса:
public interface IDummyDerived<T> : IDummy
{
void Foo(T value);
}
public interface ITempDerived<T> : IDummy
{
void HelloWorld(T value);
}
Теперь мне нужен ServiceProvider-Class, где я могу создать классы, которые реализуют данный интерфейс.Каждый интерфейс (IDummyDerived и ITempDerived) реализуется ровно один раз.
Мой подход будет следующим:
internal class DummyServiceProvider
{
public T GetDummy<T>() where T : IDummy
{
Type baseType = typeof(IDummy);
Type[] types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).Where(p => baseType.IsAssignableFrom(p) && p.IsClass).ToArray();
//now I have all classes which implements one of my interfaces
foreach(Type type in types)
{
// here I want to check if the current type is typeof(T)
// (typeof(T) == type) -> doesn't work
// (type.GetGenericTypeDefinition() == type) doesnt work
}
}
return default(T);
}
Как правильно сравнить данный typeof(T)
с типом в массиве типов?
- Обновление:
Использование DummyServiceProvider будет выглядеть следующим образом:
IDummyDerived<string> dummyDerived = myDummyServiceProvider.GetDummy<IDummyDerived<string>>()