当前类型是一个接口,并且不能构成。 是否缺少类型映射?(The current type is

2019-09-16 15:26发布

我有一个控制器类,它照顾双击命令并依次调用弹出式菜单窗口给用户的方法。 就像是 :

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

另外,在上述线它抛出一个错误说:当前类型,PopupCommand.IPopupDataHandler,是一个接口,并且不能构成。 是否缺少类型映射?

我更新包含了container.GetService(方法)的DLL,在这之前它曾经很好地工作。

我试图寻找在谷歌,但类似的问题,更关系到团结,我怀疑我的问题是否在任何地方与统一。

Answer 1:

基本上,编译器会告诉你,你正试图实例化一个接口。

container.GetService<PopupCommand>()可能带你回到一个名为接口PopupCommand.IPopupDataHandler ,你可能需要将它转换为你需要的类型或类型更改为一个对象,你也应该检查方法的约束-它可能是缺少new约束。



Answer 2:

尝试加载项DefaultController厂的注册控制器。 三个步骤:第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方法Bootstrap类注册它

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步:与在Global.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));
        } 

和finisihed。 可能这会为你工作...快乐编码。



文章来源: The current type is an interface and cannot be constructed. Are you missing a type mapping?