我按照惯例注册我的类型,但是我的其他程序集中的某些类型没有一致地注册。有时它们是注册的,而有时则不是。它不会一直失败。这是一些跟踪数据:
...是一个接口,无法构造。你错过了一个类型吗? 映射?
我想在注册过程中消除第三方dll等。这是正确的方法吗?
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterTypes(
AllClasses.FromLoadedAssemblies().Where(t => t.Namespace != null && t.Namespace.StartsWith("MY NAMESPACEs ONLY")),
WithMappings.FromMatchingInterface,
WithName.Default);
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
编辑:当我删除“Where”过滤器时,这也会随机发生。我之前使用过这种注册方法,但从未发生这种情况。发生了什么事?
答案 0 :(得分:1)
我自己弄清楚这一点,并意识到AllClasses.FromLoadedAssemblies()
没有按预期工作(它可能按预期工作,而不是我的预期)。 似乎是,因为它在不同的环境中以不同的顺序加载程序集。我无法找到解决方案,但我找到了解决方法。
我的解决方案是使用AllClasses.FromLoadedAssemblies()
来避免BuildManager.GetReferencedAssemblies()
。
.RegisterTypes(
AllClasses.FromAssemblies(
BuildManager.GetReferencedAssemblies().Cast<Assembly>()),
WithMappings.FromMatchingInterface,
WithName.Default,
overwriteExistingMappings: true);
在这里看到解决它的原始问题: Unity registration fails after iisreset