使用webapi和EntityFramework上下文设置autofac&存储库层

时间:2016-07-28 21:49:49

标签: c# entity-framework dependency-injection autofac

我在使用autofac和webapi时遇到了一些麻烦,我认为这是因为我对正确的注册方式缺乏了解。

我有一个使用entityframework和标准类型的存储库模式的存储库层来与数据库进行交互。

我的存储库层,我通过构造函数和其他存储库注入上下文,在我的示例中,我在customerRepository中传递。

e.g。

public CustomerTransactionsRepository(MyContext context, 
                          ICustomerRepository customerRepository,
                          ILog log)
    {
        _context = context;
        _customerRepository = customerRepository;
        _log = log;
    }

    public async Task<CustomerWithTransactions> FindCustomerSalesAsync(int customerId)
    {

        var customer= await _customerRepository.FindAsync(customerId);


        var transactions = await _context.Transactions
                                         .Include(c => c.CancelledSales)
                                         .SingleOrDefaultAsync(c => c.CustomerId== customer.UserId);

        return transactions;
     }

我的startup.cs配置看起来像

   private static void RegisterDependences(ContainerBuilder builder)
    {
        builder.RegisterType<AifsLog>().As<ILog>().InstancePerDependency();

        builder.RegisterAssemblyTypes(Assembly.Load("MyNS.DAL"))
            .Where(t => t.Name.EndsWith("Repository"))
            .AsImplementedInterfaces().InstancePerDependency();

        builder.Register(c => new LoggingActionFilter())
            .AsWebApiActionFilterFor<ApiController>()
            .PropertiesAutowired();

        builder.RegisterType<MyContext>().InstancePerRequest();

    }

当我尝试运行应用程序时,出现错误

  

从请求实例的作用域中看不到具有匹配'AutofacWebRequest'的标记的作用域。这通常表示SingleInstance()组件(或类似场景)正在请求注册为每HTTP请求的组件。在Web集成下,始终从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖项,从不从容器本身请求

我认为这是因为我的存储库使用了InstancePerDependency而我的dbContext使用了InstancePerRequest。

其他人有这个问题或者能看出我做错了什么?

0 个答案:

没有答案