Это мой код:
Проект 1:
public interface IComponent{}
public class ComponentTest:IComponent{}
public class Bootstraper
{
public virtual IEnumerable<IComponent> GetComponents()
{
return Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll")
.Select(Assembly.LoadFile).SelectMany(m => m.GetTypes()).Select(m => m.GetTypeInfo())
.Where(m => !m.IsAbstract && !m.IsInterface
&& typeof(IComponent).IsAssignableFrom(m)).ToList()
.Select(Activator.CreateInstance).Cast<IPlatformComponent>();
}
}
Project UnitTest:
[TestMethod]
public void GetComponenentsIsSuccess()
{
Bootstraper testObj=new Bootstraper();
IEnumerable<IComponent> ienumerable = testObj.GetComponents();
Assert.IsTrue(ienumerable.Any(m=>m.GetType()==typeof(ComponenentTest)));
}
не может найти ComponenetTest
при исключении модульного теста.
У меня два вопроса:
1. На VS Debugger View, код
Where(m=>!m.IsAbstract&&!m.IsInterface&&typeof(IComponent).IsAssignableFrom(m))
может получить тип ComponenentTest
, но тип был отменен, когда ToList()
метод оправдан.
2. тип ComponentTest
исчезает, когда код typeof(IComoponent)
, но вместо этого я использую typeof(object)
, после извиняемого 'ToList ()', ComponentTest
все еще находится в коллекции