2012-04-19 9 views
8

Mam klasę kontrolera, która dba o podwójne kliknięcie polecenia, a następnie wywołuje metodę, która wyskakuje okno do użytkownika. Coś jak:Bieżący typ jest interfejsem i nie można go skonstruować. Brakuje mapowania typu?

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

W powyższej linii zgłasza błąd mówiąc: bieżącego typu, PopupCommand.IPopupDataHandler, to interfejs i nie może być wykonana. Brakuje mapowania typu?

Zaktualizowałem bibliotekę DLL, która zawierała metodę container.GetService(), wcześniej działała poprawnie.

Próbowałem wyszukiwania w google, ale podobne problemy są bardziej związane z Unity, i wątpię, czy mój problem jest w dowolnym miejscu związane z Unity.

+0

Przeczytaj [pomoc do edycji] (http://stackoverflow.com/editing-help#code). –

+1

Jaki jest typ "kontenera"? –

+0

Ponadto, jakie argumenty wywołuje 'PopupCommand' w jego konstruktorze. Czy wyjątek zawiera więcej informacji? –

Odpowiedz

1

Zasadniczo kompilator mówi, że próbujesz utworzyć instancję interfejsu.

container.GetService<PopupCommand>() prawdopodobnie przywraca interfejs o nazwie PopupCommand.IPopupDataHandler, prawdopodobnie trzeba oddać go do rodzaju trzeba albo zmienić typ do obiektu, należy również sprawdzić ograniczenia co o metody - może to być brak new ograniczenie .

0

Spróbuj dodać DefaultController Factory do rejestracji kontrolera. trzy etapy: Etap 1 1.Add klasy DefaultControllerFactory w projekcie

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

Krok 2: zarejestruj go w klasie Bootstrap w Metodzie 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; 
    } 

Krok 3: i zarejestrować go w globalnym .asax Plik

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

I wykończony. Może to zadziała dla Ciebie ... Happy Coding.

Powiązane problemy