我有一个控制器类,它照顾双击命令并依次调用弹出式菜单窗口给用户的方法。 就像是 :
var popup = container.GetService<PopupCommand>();
另外,在上述线它抛出一个错误说:当前类型,PopupCommand.IPopupDataHandler,是一个接口,并且不能构成。 是否缺少类型映射?
我更新包含了container.GetService(方法)的DLL,在这之前它曾经很好地工作。
我试图寻找在谷歌,但类似的问题,更关系到团结,我怀疑我的问题是否在任何地方与统一。
基本上,编译器会告诉你,你正试图实例化一个接口。
container.GetService<PopupCommand>()
可能带你回到一个名为接口PopupCommand.IPopupDataHandler
,你可能需要将它转换为你需要的类型或类型更改为一个对象,你也应该检查方法的约束-它可能是缺少new
约束。
尝试加载项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?