我在使用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。
其他人有这个问题或者能看出我做错了什么?