我在构建项目WindowsForm应用程序依赖注入时遇到问题。 这是我在Program.cs文件中的代码。
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
// Register your Web API controllers.
//builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
builder.RegisterType<DbFactory>().As<IDbFactory>().InstancePerRequest();
builder.RegisterType<DITestDbContext>().AsSelf().InstancePerRequest();
//builder.Register(c => app.GetDataProtectionProvider()).InstancePerRequest();
// Repositories
builder.RegisterAssemblyTypes(typeof(ProductCategoryRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces().InstancePerRequest();
// Services
builder.RegisterAssemblyTypes(typeof(ProductCategoryService).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces().InstancePerRequest();
Autofac.IContainer container = builder.Build();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(container.Resolve<Form1>());
`
这是我在Form1.cs中的代码
private IProductCategoryService productCategoryService;
private IUnitOfWork unitOfWork;
public Form1(IProductCategoryService productCategoryService, IUnitOfWork unitOfWork)
{
this.productCategoryService = productCategoryService;
this.unitOfWork = unitOfWork;
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
LoadProductCategory();
}
private void LoadProductCategory()
{
var data = productCategoryService.GetAll();
gridControl1.DataSource = data;
}
我得到了错误
DependencyResolutionException:无法解析类型'DITest.Service.ProductCategoryService',因为无法找到其所属的生存期范围。此注册提供以下服务: -DITest.Service.IProductCategoryService'
我认为启动Form1时出错。有人可以帮助我吗? 谢谢!
答案 0 :(得分:0)
您收到此错误,是因为您在Windows窗体应用程序中使用InstancePerRequest
。
InstancePerRequest
供Web应用程序使用,它允许每个Web请求具有一个实例。
为了使您的应用程序正常运行,只需删除InstancePerRequest
。如果未指定范围, Autofac 将使用InstancePerDependency
范围。
您可以在文档中找到有关范围的更多信息:Instance scope