2017-05-01 1 views
0

Unity config newbie, j'essaie de mettre en œuvre cela dans mon projet. Cependant, je suis coincé.Configurer Unity pour travailler avec Web api

Je reçois l'erreur suivante: Le type actuel, System.Web.Mvc.IControllerFactory, est une interface et ne peut pas être construit. Manquez-vous un mappage de type?

ContainerClass

public class ContainerBootstrapper 
    { 
     public static void ConfigureUnityContainer() 
     { 
      //simple registeration 
      container.RegisterType<IProduct, ProductHelper>(); //maps interface to a concrete type 

      System.Web.Mvc.DependencyResolver.SetResolver(new MyProjectControllerDependency(container)); 

     } 

    } 

DependencyResolver

public class MyProjectControllerDependency : IDependencyResolver 
{ 
private IUnityContainer _container; 

public MyProjectControllerDependency(IUnityContainer container) 
{ 
    this._container = container; 
} 

public object GetService(Type serviceType) 
{ 
    return _container.Resolve(serviceType); 
} 

public IEnumerable<object> GetServices(Type serviceType) 
{ 
    return _container.ResolveAll(serviceType); 
} 

Controller:

public class ProductController : ApiController 
{ 
    private readonly IProduct _iproduct; 

    public ProductController(IProduct product) 
    { 
     this._iproduct = product; 
    } 
//controller methods 
} 

Interface

public interface IProduct 
{ 
    List<ProductViewModel> GetProductByBarcode(string value); 
    string GetProductPrice(string value); 
} 

Aide

public class ProductHelper : IProduct 
    { 
     //private readonly IProduct _iproduct; 

     //public ProductHelper(IProduct iproduct) 
     //{ 
     // this._iproduct = iproduct; 
     //} 

     public List<ProductViewModel> GetProductByBarcode(string value) 
     { 
      throw new NotImplementedException(); 
     } 

     public string GetProductPrice(string value) 
     { 
      throw new NotImplementedException(); 
     } 
} 

Je ne comprends pas, ce que je suis absent? Est-ce que quelqu'un peut-il me montrer la bonne direction.

+0

Utilisez-vous Unity.Mvc? –

+0

J'ai installé l'unité via Nuget, je ne suis pas sûr. @ChetanRanpariya – Haris

+1

Pour les projets MVC et WebAPI, Unity.MVC est requis. Vous n'aurez même pas besoin de créer DependencyResolver personnalisé. Installez Unity.Mvc et recherchez des exemples dans google. C'est facile à configurer et à brancher. –

Répondre

1

Pour les projets ASP.NET MVC et WebApi utilisant uniquement Unity n'est pas suffisant. Pour ces projets, vous devez également installer Unity.MVC à partir de nuget.

Il s'agit de classes prêtes à l'emploi prêtes à l'emploi. Vous avez juste besoin d'enregistrer les dépendances dans UnityContainer et terminé. Une fois que vous avez installé Unity.MVC, il crée les classes UnityMvcActivator et UnityConfig. UnityConfig classe a l'implémentation de l'initialisation UnityContainer. Tout ce que vous avez besoin de faire cela dépend de la méthode RegisterTypes.

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterType<IBaseClass, BaseClass>(); // Registering types 
    container.LoadConfiguration(); 
} 

Vous n'avez pas besoin de créer un type ou une implémentation personnalisé à moins que vous n'ayez des besoins complètement différents.

Cela devrait vous aider à résoudre votre problème.

+0

Je vais accepter cela car il m'a fait réaliser que je dois mettre en œuvre l'unité pour l'API web pas mvc pour mes fins que je n'utilise que l'API Web. – Haris