0

工作,我有幾個不同的項目與解決方案:Autofac工作在ConsoleApplcation而不是從網站

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

我設法設置Autofac從控制檯應用程序工作,依賴項被正確注入,一切都按預期運行。

控制檯應用程序中有非常簡單的邏輯,它所做的只是向數據庫添加一條新記錄,然後顯示數據庫中的所有記錄。

該網站正在嘗試做同樣的事情,但當我在網站中調用GetAll方法時,它不返回任何記錄。沒有錯誤被拋出。

所有接口和具體類都位於控制檯應用程序和網站引用的Project.Common項目中。

我不知道爲什麼它在控制檯應用程序中,而不是在網站項目中工作 - 我是否需要爲每個項目以不同方式配置Autofac?

我的數據層使用實體框架下面這種方法構建:
http://techbrij.com/autofac-ioc-container-asp-net-mvc-di

該網站是一把umbraco CMS網站,有自己的數據庫(不知道是否有差別)

這是我的代碼目前的樣子:

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

這些都是在BOTH利弊正在加載的模塊ole應用程序和網站。

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

所以那裏的人有什麼想法?

+1

您已經提供了ConsoleApp的Autofac註冊碼,您能否提供WebApp的代碼?您正在WebApp的組合根目錄中註冊Autofac? –

+0

您的MVC控制器看起來像包含'GetAll'方法嗎? – Steven

+0

這是一個連接字符串問題,愚蠢的我。 –

回答

0

這是一個連接字符串問題,愚蠢的我。