2010-07-30 8 views
2

Est-ce que quelqu'un a une idée de ce que je fais de mal?Comment résoudre une instance nommée à partir d'une classe statique?

J'ai une telle classe statique:

public static class ApplicationContainer 
{ 
    private static ContainerBuilder builder = null; 
    private static IContainer container = null; 

    public static void Create() 
    { 
     builder = new ContainerBuilder(); 

     builder.RegisterInstance(new Repository<Log>(RepositoryType.Main)) 
      .As<IRepository<Log>>().SingleInstance() 
      .Named("Log", typeof(Repository<Log>)); 

     container = builder.Build(); 
    }  

    public static IContainer Container() 
    { 
     if (container != null) return container; 
     throw new Exception("Container is not ready."); 
    } 
} 

Dans Global.asax.cs de mon application MVC j'ai:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     ApplicationContainer.Create(); 

     RegisterRoutes(RouteTable.Routes); 
    } 

Et maintenant sur problème: comment puis-je résoudre instance nommée à partir d'un conteneur? Mais lorsque la classe ApplicationContainer n'est pas statique, la résolution du conteneur fonctionne très bien. J'utilise autofac 2.2.4.

+3

Oui, j'ai une bonne idée de ce que vous faites mal: Vous utilisez un localisateur de service statique: http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx Ne faites pas ça . –

+1

Cela dit, cependant, * comment * ça ne marche pas? Est-ce qu'il lance une exception? Laquelle? Le "conteneur n'est pas prêt." Exception? –

+0

Vous aurez certainement besoin de publier l'exception afin d'obtenir une réponse précise à cette question. –

Répondre

0

Je crois que vous ne pouvez pas compiler ce code puisqu'il vous manque un '' 'de fermeture pour votre appel .Resolve(...).

Cela dit, avez-vous regardé les modules Autofac ASP.Net integration?

+1

Vous oubliez de mentionner qu'une telle déclaration dans DefaultLogger n'est pas valide du tout (: –