Autofac 在 ConsoleApplcation 中工作但不在网站上工作

Autofac Working In ConsoleApplcation but not working from Website

我有一个包含几个不同项目的 VS 解决方案:

我已经成功地将 Autofac 设置为在控制台应用程序中工作,依赖项被正确注入并且一切都按预期工作。

Console Application里面的逻辑非常简单,它所做的就是向数据库中添加一条新记录,然后显示数据库中的所有记录。

该网站正在尝试做完全相同的事情,但是当我在网站中调用 GetAll 方法时,它 returns 没有任何记录。没有抛出任何错误。

所有接口和具体 类 都在控制台应用程序和网站都引用的 Project.Common 项目中。

我不明白为什么它在控制台应用程序中工作而不在网站项目中工作 - 我需要为每个项目以不同的方式配置 Autofac 吗?

我的数据层是使用 entity framework 按照以下方法构建的:
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();
        }
    }
}

这些是正在控制台应用程序和网站中加载的模块。

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

所以有人有什么想法吗?

这是一个连接字符串问题,愚蠢的我。