我正在注册一大堆依赖项。
container.RegisterTypes(AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default,
overwriteExistingMappings: true);
这样可以很好地注册,并且正确配置了web api端点。
如果我做iisreset
或者只是稍等一下,那么事情就会失败
错误消息不是非常有用
"exceptionMessage": "An error occurred when trying to create a controller of type 'ApiController'. Make sure that the controller has a parameterless public constructor.",
控制器当然没有,也不应该有。
我不确定发生了什么......但如果我明确注册了依赖项
container.RegisterType<IDoAThing, Domain.Things.DoAThing>(new HierarchicalLifetimeManager());
然后一切正常。
我怎样才能按照惯例获得&#39;注册继续工作?
答案 0 :(得分:4)
在iisreset
之后,在Unity注册开始之前,程序集尚未加载到应用程序域中。
由于您使用的是辅助方法AllClasses.FromLoadedAssemblies()
,因此它不会在尚未加载的程序集中注册类。
尝试使用BuildManager.GetReferencedAssemblies
获取引用的程序集,这将获取bin文件夹中的程序集列表。然后使用这些程序集和AllClasses.FromAssemblies
辅助方法执行Unity注册。
.RegisterTypes(
AllClasses.FromAssemblies(
BuildManager.GetReferencedAssemblies().Cast<Assembly>()),
WithMappings.FromMatchingInterface,
WithName.Default,
overwriteExistingMappings: true);
在最糟糕的情况下,您可以使用每个程序集中的一个众所周知的类,通过反射获取它的装配,并将其用于注册,如此简化示例:
.RegisterTypes(
AllClasses.FromAssemblies(typeof(Foo).Assembly),
WithMappings.FromMatchingInterface,
WithName.Default,
overwriteExistingMappings: true);