0

J'ai une solution VS avec quelques différents projets:Autofac travail En ConsoleApplcation mais ne fonctionne pas du site

  • Project.ConsoleApplication
  • Project.Common
  • Project.Website

J'ai réussi à configurer Autofac pour fonctionner à partir de l'application Console, les dépendances sont injectées correctement et tout fonctionne comme prévu.

L'application de console a une logique très simple, tout ce qu'elle fait est d'ajouter un nouvel enregistrement à la base de données et ensuite afficher tous les enregistrements dans la base de données.

Le site Web essaie de faire exactement la même chose mais lorsque j'appelle la méthode GetAll sur le site Web, il ne renvoie aucun enregistrement. Aucune erreur n'est levée.

Toutes les classes Interfaces et Concrete se trouvent dans le projet Project.Common auquel l'application console et le site Web font référence.

Je n'arrive pas à comprendre pourquoi cela fonctionne dans l'application console et non dans le projet de site Web - Ai-je besoin de configurer Autofac d'une manière différente pour chaque projet?

Mes données-couche est construit en utilisant Entity Framework suivant cette approche:
http://techbrij.com/autofac-ioc-container-asp-net-mvc-di

Le site est un site Umbraco CMS qui a sa propre base de données (ne sais pas si cela fait une différence)

Cette est la façon dont mon code ressemble actuellement:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = ConfigureContainer(); 
     var application = container.Resolve<ApplicationLogic>(); 
     application.Run(); 
    } 

    private static IContainer ConfigureContainer() 
    { 
     var builder = new ContainerBuilder(); 

     builder.RegisterModule(new RepositoryModule()); 
     builder.RegisterModule(new ServiceModule()); 
     builder.RegisterModule(new EFModule()); 

     builder.RegisterType<ApplicationLogic>(); 
     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

     return container; 
    } 

    private class ApplicationLogic 
    { 
     private readonly ICampaignService campaignService; 

     public ApplicationLogic(ICampaignService campaignService) 
     { 
      this.campaignService = campaignService; 
     } 

     public void Run() 
     { 
      Console.WriteLine("enter a name to create a new campaign: "); 
      string campaignName = Console.ReadLine(); 
      Console.WriteLine("Attempting to create new campaign, please wait..."); 

       var newCampaign = new Campaign(); 

       newCampaign.CampaignName = campaignName; 
       newCampaign.IsActive = true; 

       campaignService.Create(newCampaign); 

       Console.WriteLine(string.Format("The Campaign'{0}' has been created successfully.", campaignName)); 


       var currentCampaigns = campaignService.GetAll(); 

       foreach (var campaign in currentCampaigns) 
       { 
        Console.WriteLine(string.Format("The Campaign'{0}' Found.", campaign.CampaignName)); 
        Console.WriteLine(System.Environment.NewLine); 
       } 


       Console.ReadLine(); 
     } 
    } 
} 

ce sont les modules qui sont chargés dans DEUX les inconvénients ole app et le site Web.

public class EFModule : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterModule(new RepositoryModule()); 

     builder.RegisterType(typeof(RewardsDbContext)).As(typeof(DbContext)).InstancePerLifetimeScope(); 
     builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerLifetimeScope(); 
     //builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerRequest(); 

    } 
} 

public class RepositoryModule : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterAssemblyTypes(Assembly.Load("Project.Common")) 
       .Where(t => t.Name.EndsWith("Repository")) 
       .AsImplementedInterfaces() 
       .InstancePerLifetimeScope(); 
    } 
} 

public class ServiceModule : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 

     builder.RegisterAssemblyTypes(Assembly.Load("Project.Common")) 
        .Where(t => t.Name.EndsWith("Service")) 
        .AsImplementedInterfaces() 
        .InstancePerLifetimeScope(); 
    } 
} 

Alors quelqu'un a-t-il des idées?

+1

Vous avez fourni le code d'enregistrement Autofac pour ConsoleApp. Pourriez-vous fournir le code de la WebApp? Vous enregistrez Autofac dans la racine de la composition de la WebApp? –

+0

Comment ressemble votre contrôleur MVC qui contient la méthode 'GetAll'? – Steven

+0

C'était un problème de chaîne de connexion, idiot moi. –

Répondre

0

C'était un problème de chaîne de connexion, idiot moi.