2012-04-19 131 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)); 
     } 

并已完成。 可能是这会为你工作... 快乐编码。

相关问题