2012-04-19 24 views
8

Tôi có một lớp điều khiển mà sẽ chăm sóc cho các nhấp đúp lệnh và lần lượt gọi một phương pháp popups một cửa sổ cho người dùng. Một cái gì đó như:Loại hiện tại là một giao diện và không thể được xây dựng. Bạn đang thiếu một ánh xạ kiểu?

var popup = container.GetService<PopupCommand>(); 

Trong dòng trên nó ném một lỗi nói: Các loại hiện nay, PopupCommand.IPopupDataHandler, là một giao diện và không thể được xây dựng. Bạn đang thiếu một ánh xạ kiểu?

Tôi đã cập nhật DLL chứa phương thức cho container.GetService(), trước khi nó được sử dụng để hoạt động tốt.

Tôi đã thử tìm kiếm trong google, nhưng các sự cố tương tự có liên quan nhiều hơn đến Unity và tôi nghi ngờ liệu sự cố của tôi có liên quan đến Unity hay không.

+0

Đọc [help help] (http://stackoverflow.com/editing-help#code). –

+1

Loại 'container' là gì? –

+0

Ngoài ra, đối số nào 'PopupCommand' nhận vào hàm tạo của nó. Ngoại lệ có chứa thêm một số thông tin không? –

Trả lời

1

Về cơ bản trình biên dịch cho bạn biết rằng bạn đang cố gắng tạo một giao diện.

container.GetService<PopupCommand>() có thể đưa bạn trở lại giao diện có tên PopupCommand.IPopupDataHandler, có thể bạn cần truyền đến loại bạn cần hoặc thay đổi loại đối tượng, bạn cũng nên kiểm tra các ràng buộc của phương pháp - có thể thiếu ràng buộc new .

0

Hãy thử Addin DefaultController Factory để đăng ký bộ điều khiển của bạn. Ba bước: Bước 1 1.Add Class DefaultControllerFactory trong dự án của bạn

public class ControllerFactory :DefaultControllerFactory 
    { 
     protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
     { 
      try 
      { 
       if (controllerType == null) 
        throw new ArgumentNullException("controllerType"); 

       if (!typeof(IController).IsAssignableFrom(controllerType)) 
        throw new ArgumentException(string.Format(
         "Type requested is not a controller: {0}", 
         controllerType.Name), 
         "controllerType"); 

       return MvcUnityContainer.Container.Resolve(controllerType) as IController; 
      } 
      catch 
      { 
       return null; 
      } 

     } 
     public static class MvcUnityContainer 
     { 
      public static UnityContainer Container { get; set; } 
     } 
    } 

Bước 2: Đăng ký nó trong lớp Bootstrap trong BuildUnityContainer Phương pháp

private static IUnityContainer BuildUnityContainer() 
    { 
     var container = new UnityContainer(); 

     // register all your components with the container here 
     // it is NOT necessary to register your controllers 

     // e.g. container.RegisterType<ITestService, TestService>();  
     //RegisterTypes(container); 
     container = new UnityContainer(); 
     container.RegisterType<IProductRepository, ProductRepository>(); 


     UnityInterceptionExample.Models.ControllerFactory.MvcUnityContainer.Container = container; 
     return container; 
    } 

Bước 3: Và đăng ký nó trong The Global .asax File

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 
      Bootstrapper.Initialise(); 
      ControllerBuilder.Current.SetControllerFactory(typeof(ControllerFactory)); 
     } 

Và finisihed. Có thể điều này sẽ phù hợp với bạn ... Mã hóa hạnh phúc.

Các vấn đề liên quan