我需要根据命名空间过滤动态注册我的类型。
这是我的代码:
var q = from t in AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
where (t.IsInterface || t.IsClass) && t.Namespace == namespaceToAdd
select t;
var types = q.ToList();
types.Where(t => t.IsInterface).Select(i=>
{
var matchingClass = types.Where(c => c.IsClass && i.IsAssignableFrom(c)).FirstOrDefault();
if (matchingClass != null)
{
container.RegisterType(i, matchingClass, null, new ContainerControlledLifetimeManager())();
}
});
但容器调用失败:"方法名称"预期。 " I"是反射的界面 " matchingClass"相应的实现类型。
我已经在SO中阅读了有关此主题但未找到我的解决方案(切换到Unity 3.0,这不是一个选项)。
Msdn也没有帮助(https://msdn.microsoft.com/en-us/library/dn507499(v=pandp.30).aspx)
代码将在之后被清除(我只使用一种形式的linq,一旦这个工作:) :)
我错过了什么?