제 애완 동물 프로젝트에서 DI 컨테이너로 터빈을 사용하는 방법을 배우려고합니다.매개 변수화 된 컨트롤러 생성자가 절대 실행되지 않습니다.
static MvcApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
}
내 사용자 저장소가 매개 변수없는 생성자가 나는 등을 등록하고 있습니다 :
나는 같은 locatorprovider 등의 단결을 등록하고있어 다음
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;
}
}
매개 변수없는 ct 또는 (위의 코드처럼) 내가 얻을이 (full here) :
Server Error in '/' Application. No parameterless constructor defined for this object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.MissingMethodException: No parameterless constructor defined for this object. [InvalidOperationException: An error occurred when trying to create a controller of type 'Boris.BeekProject.Guis.Web.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.]
그래서 내 HomeController는 parless의의 ctor를 할 의무가있다. 인스턴스화하는 유니티 컨트롤러 팩토리가 아니라 디폴트 컨트롤러 팩토리 인 것 같습니다.
UPDATE는
내 MVCApplication는 TurbineApplication를 상속하고 RouteRegistration이 잘 포착되어 있기 때문에 그 문제는 다른 곳에있다 생각합니다. 토마스 Eyde에 의해 제안
UPDATE
은 내가 TurbineApplication.AutoComponent
메소드를 오버라이드 (override) 싶었지만, 개체 브라우저를 확인,이 방법에 대한 참조를 볼 수 없습니다. NerdDinner 예제를 보면이 메서드를 재정의하는 것처럼 보이지 않습니다. online documentation about it을 확인한 후 더 현명하지 못하고 문서에 대한 링크를 따라 doing the registration manually에 관해서는 자리 표시 자 페이지를 제공합니다. 누군가 내가 잘못하고있는 것에 나를 채울 수 있습니까?
내가 누락 된 항목이 있습니까?
또한이 예외의 형식에 대한 힌트가 유용 할 것입니다. 메타에 관련된 문제를 게시했습니다 : http://meta.stackexchange.com/questions/32264/posting-a-stack-trace –
TurbineApplication 클래스를 상속 받았습니까? Global.asax MvcApplication 클래스? –
@Magnus : 예, TurbineApplication에서 상속됩니다. 이상한 것은 IRouteRegistration이 잘 선택되었다는 것입니다. –