2012-04-19 129 views
8

我有一個控制器類,負責雙擊命令,並依次調用一個方法,彈出一個窗口給用戶。類似:當前類型是一個接口,不能構造。你是否缺少類型映射?

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

在它拋出一個錯誤說上面的行: 當前類型,PopupCommand.IPopupDataHandler,是一個接口,並且不能構成。你是否缺少類型映射?

我更新了包含container.GetService()方法的DLL之前,它曾經工作正常。

我試過在谷歌搜索,但類似的問題更多與Unity有關,我懷疑我的問題是否與Unity有關。

+0

閱讀[編輯幫助](http://stackoverflow.com/editing-help#code)。 – 2012-04-19 04:33:15

+1

'container'的類型是什麼? – 2012-04-19 04:37:24

+0

另外,'PopupCommand'在它的構造函數中有什麼參數。異常是否包含更多信息? – 2012-04-19 05:26:14

回答

1

基本上,編譯器告訴你,你正試圖實例化一個接口。

container.GetService<PopupCommand>()可能帶你回到一個名爲PopupCommand.IPopupDataHandler的接口,你可能需要將它轉換爲你需要的類型或類型更改爲一個對象,你也應該檢查方法的約束 - 這可能是缺少new約束。

0

試用Addin DefaultController Factory註冊您的控制器。 三個步驟:步驟1 1.新增一類DefaultControllerFactory在你的項目

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; } 
     } 
    } 

步驟2:註冊它引導類BuildUnityContainer方法

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; 
    } 

步驟3:並在全球註冊它.asax文件

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)); 
     } 

並已完成。 可能是這會爲你工作... 快樂編碼。

相關問題