2009-09-01 9 views
10

Tôi có một dự án mà tôi sử dụng StructureMap để tiêm phụ thuộc. Dự án biên dịch tốt như một dự án MVC nhưng sau khi di chuyển tất cả mọi thứ cho một dự án MVC2 Tôi bây giờ nhận được lỗi sau:ASP.NET MVC 2 Preview 1 - Vấn đề biên soạn Nhà máy điều khiển StructureMap

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type)': no suitable method found to override C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web

Đây là StructureMapControllerFactory tôi:

using System; 
using System.Web.Mvc; 
using StructureMap; 

namespace Test.Web.Controllers 
{ 
    public class StructureMapControllerFactory : DefaultControllerFactory 
    { 

     protected override IController GetControllerInstance(Type controllerType)** 
     { 

      IController result = null; 
      try 
      { 
       if (controllerType == null) return base.GetControllerInstance(controllerType); 
       result = ObjectFactory.GetInstance(controllerType) as Controller; 

      } 
      catch (StructureMapException) 
      { 
       System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
       throw; 
      } 

      return result; 
     } 

    } 
} 

Tôi đã tìm thấy một bài bán liên quan đến vấn đề này nhưng không cung cấp bất kỳ thông tin chi tiết nào về cách giải quyết vấn đề của tôi: MVC 2 preview 1 - methods with parameters in the controller fail to load

Rõ ràng tôi phải thiếu thay đổi so với tiến trình 1.0-2.0, nhưng tôi không chắc chắn những gì đã thay đổi. Mọi trợ giúp luôn được đánh giá cao.

Trả lời

19

Chữ ký của phương pháp này đã thay đổi. bây giờ có một cuộc tranh luận đầu tiên của RequestContext:

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType) 

Bạn cũng sẽ cần phải thay đổi cuộc gọi của bạn để base.GetControllerInstance:

if (controllerType == null) 
    return base.GetControllerInstance(requestContext, controllerType); 
+0

Cảm ơn Craig rất nhiều. Tôi tự hỏi tại sao điều này không được phản ánh trong trình duyệt đối tượng VS khi khám phá không gian tên System.Web.MVC [2.0.0.0]. –

+1

Không chắc chắn, nhưng bạn có thể gõ ov [spacebar] trong trình soạn thảo mã (nghĩa là bắt đầu nhập "ghi đè", nơi bạn thường khai báo một phương thức mới) để có danh sách các phương thức quá tải cho lớp hiện tại với chữ ký của chúng. –

1

tôi truy tìm nó với Reflector, và thực chữ ký chức năng là đã thay đổi. các

bảo vệ nội bộ ảo IController GetControllerInstance (RequestContext requestContext, Loại controllerType)

dll MVC 2 cư trú ở đây: C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Cảm ơn, nó đã giải quyết được vấn đề của tôi!

8

Craig Stuntz rất đúng ở đây.

Chỉ cần đảm bảo bạn không quên tham chiếu System.Web.Routing ngoài ra nếu DI của bạn nằm trong một dự án khác với ứng dụng MVC của bạn.

Vì một số lý do không có lỗi hiển thị trong IDE cho tôi nhưng khi biên dịch tôi vẫn nhận được một GetControllerInstance "không có phương thức phù hợp nào được tìm thấy để ghi đè."

Khi tôi đã sửa cụm hội đồng tham chiếu bị mất tích của System.Web.Routing, tất cả đều tốt ...

+0

Cảm ơn !. Tôi không biết tại sao, nhưng thêm một tham chiếu đến System.Web.Routing cố định điều này cho tôi! –

+0

Cảm ơn nhận xét System.Web.Routing - đã lưu tôi gỡ lỗi thời gian. – Ben