2012-04-19 12 views
8

Çift tıklama komutunu dikkate alan bir denetleyici sınıfım var ve sırayla kullanıcıya bir pencereyi açan bir yöntem çağırıyor. Bir şey gibi: o belirten bir hata atar Yukarıdaki satırdaGeçerli tür bir arabirimdir ve yapılamaz. Bir tür eşlemesi eksik misiniz?

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

: akım tipi, PopupCommand.IPopupDataHandler, bir arayüzdür ve inşa edilemez. Bir tür eşlemesi eksik misiniz?

Önce iyi çalıştığından önce container.GetService() yöntemini içeren DLL'yi güncelleştirdim.

Google'da arama yapmayı denedim, ancak benzer sorunlar Unity ile daha çok ilişkilidir ve sorunumun Birlik ile ilgili olup olmadığı konusunda şüphelerim var.

+0

[Düzenleme yardımı] 'nı okuyun (http://stackoverflow.com/editing-help#code). –

+1

'container'ın türü nedir? –

+0

Ayrıca, PopupCommand’ın yapıcısında hangi argümanlar var? Özel durum daha fazla bilgi içeriyor mu? –

cevap

1

Temel olarak derleyici, bir arabirimi başlatmaya çalıştığınızı söyler.

container.GetService<PopupCommand>() muhtemelen muhtemelen, ayrıca yöntemin, kısıtlarını kontrol etmelisiniz ihtiyacınız türüne döküm veya bir nesneye türünü değiştirmek gerekir, PopupCommand.IPopupDataHandler adında bir arayüz size geri getirir - bu new kısıtlamayı eksik olabilir .

0

Denetleyicinizi kaydetmek için Addin DefaultController Factory'yi deneyin. Üç Adım: Adım senin Projesi 1 1.Add Sınıf 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; } 
     } 
    } 

Adım 2: BuildUnityContainer Yöntem özyükleme sınıfta Kayıt

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

Adım 3: Ve Küresel bunu Kayıt .asax Dosya

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

Ve sonlandırıldı. Bu sizin için çalışacaktır ... Mutlu Kodlama.