通过我的宠物项目,我正在尝试学习使用 Turbine 作为 DI 容器。
我正在将 unity 注册为 locatorprovider,如下所示:
static MvcApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
}
我的用户存储库有一个无参数的构造函数,我正在注册它:
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, UserRepository>();
}
}
然后我有我的 HomeController 应该接受 IUserRepository
public class HomeController : Controller
{
private readonly IUserRepository userRepository;
public HomeController(IUserRepository repository)
{
userRepository = repository;
}
}
如果我省略无参数 ctor(如上面的代码片段),我会得到这个(完整的这里):
“/”应用程序中的服务器错误。 没有为此对象定义无参数构造函数。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。 [InvalidOperationException:尝试创建类型为“Boris.BeekProject.Guis.Web.Controllers.HomeController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。]
所以我的 HomeController 有义务有一个 parless ctor。似乎不是 Unity 控制器工厂在实例化,而是默认控制器工厂。
更新
我的 MVCApplication 正在继承 TurbineApplication 并且由于 RouteRegistration 被拾取得很好,我认为问题出在其他地方。
更新
正如 Thomas Eyde 所建议的,我想覆盖该TurbineApplication.AutoComponent
方法,但检查对象浏览器,我看不到任何对该方法的引用。此外,当我查看 NerdDinner 示例时,它似乎也没有覆盖此方法。在检查了有关它的在线文档后,我没有得到任何更明智的信息,并且按照有关手动注册的文档的链接为我提供了一个占位符页面。谁能告诉我我做错了什么?
我错过了什么吗?