0

J'essaie d'utiliser Unity comme mon conteneur IoC, qui fonctionne «un peu».Injection de dépendance avec Unity et ASP.NET MVC

Snip de global.asax:

protected void Application_Start() 
    { 
     //... left out for clarity 

     //setup dependency injection with Microsoft Unity 
     DependencyInjection(); 
    } 

    private void DependencyInjection() 
    { 
     var container = new UnityContainer(); 

     container.RegisterType<ITimeregEntities, TimeregEntities>() 
      .Configure<InjectedMembers>() 
      .ConfigureInjectionFor<TimeregEntities>(new InjectionConstructor()); 

     container.RegisterType<TimeregistreringerController.IHelloWorld, TimeregistreringerController.MyHelloWorld>(); 

     //###PROBLEM HERE### 
     container.RegisterType<ITimeregistreringerRepository, TimeregistreringerRepository>(); 
     //###END-PROBLEM### 

     var factory = new UnityControllerFactory(container); 

     ControllerBuilder.Current.SetControllerFactory(factory); 
    } 

Cette dépendance est ajouté sur mon « Timeregistreringer'-Controller:

public class TimeregistreringerController : BaseController 
{ 
    // 
    // GET: /Timeregistreringer/ 

    public ActionResult Index() 
    { 
     var approved = TimeregistreringerRepository.FindApproved(); 
     ViewData.Model = approved; 
     ViewData["HelloText"] = Attribute.SayHello(); 

     return View(); 
    } 

    //###THIS WORKS 
    [Dependency] 
    public IHelloWorld Attribute 
    { 
     get;set; 
    } 
    //###END-THIS WORKS### 


    //###PROBLEM ATTRIBUTE, Does not resolve### 
    [Dependency] 
    public ITimeregistreringerRepository TimeregistreringerRepository 
    { 
     get; 
     set; 
    } 
    //###END-PROBLEM### 

    public interface IHelloWorld 
    { 
     string SayHello(); 
    } 

    public class MyHelloWorld : IHelloWorld 
    { 
     public string SayHello() 
     { 
      return "Hello, World!"; 
     } 
    } 
} 

La mise en œuvre de TimeregistreringerRepository sont les suivantes:

public class TimeregistreringerRepository : RepositoryBase, ITimeregistreringerRepository 
{ 
    public TimeregistreringerRepository(ITimeregEntities entities) : base(entities) 
    { 
    } 

    public IQueryable<Timeregistreringer> FindApproved() 
    { 
     return _entities 
      .FindAll<Timeregistreringer>() 
      .Where(t => t.Godkendt == true); 
    } 
} 

public interface ITimeregistreringerRepository : IRepository 
{ 
    IQueryable<Timeregistreringer> FindApproved(); 
} 

public interface IRepository 
{ 
    void Add<T>(T t) where T : IEntityWithKey; 
} 

public class RepositoryBase : IRepository 
{ 
    protected ITimeregEntities _entities; 
    public RepositoryBase(ITimeregEntities entities) 
    { 
     _entities = entities; 
    } 

    #region IRepository Members 

    public IQueryable<T> FindAll<T>() 
    { 
     return _entities.FindAll<T>(); 
    } 

    public void Add<T>(T t) where T : IEntityWithKey 
    { 
     _entities.Add<T>(t); 
    } 

    #endregion 
} 

Maintenant pour l'erreur que je reçois:

La résolution de la dépendance a échoué, tapez = "[hidden by me] .MVCWeb.Controllers.TimeregistreringerController", name = "". Le message d'exception est: L'opération de génération en cours (clé de construction Build Key [[masqué par moi] .MVCWeb.Controllers.TimeregistreringerController, null]) a échoué: La valeur de la propriété "TimeregistreringerRepository" n'a pas pu être résolue. (Type de stratégie BuildPlanStrategy, indice 3)

Maintenant, remarquez que dans la méthode injection de dépendances() Je ne registre ITimeregistreringerRepository taper TimeregistreringerRepository, et il est un attribut [dépendance] sur cette classe-attribut, donc Je ne peux tout simplement pas voir ce qui me manque? Une autre chose à noter est que j'ai ajouté un attribut supplémentaire appelé "Attribute" que j'ai enregistré avec IHelloWorld et MyHelloWorld, et cela fonctionne parfaitement.

Merci d'avoir pris le temps de lire tout ceci :-) Dans l'attente de vos idées et suggestions!

+0

Je devrais mentionner que l'erreur est à l'exécution! La solution se construit parfaitement! – CodeMonkey

Répondre

0

Mon problème provenait d'ailleurs dans le code, mais avait été enveloppé dans plusieurs autres exceptions, il était donc très difficile de localiser le problème. La description du problème n'est pas intéressante dans ce contexte.

+0

Pourriez-vous s'il vous plaît expliquer plus quel était le problème? Parce que, maintenant je fais face à la même exception. Merci ... – Ravi

+0

Mon problème était que j'ai regardé l'exception dans Visual Studio. Si je laisse le programme continuer à fonctionner, j'ai obtenu de meilleures informations d'exception. – CodeMonkey

Questions connexes