ASP中的Autofac模块注册.净之前

本文关键字:注册 模块 中的 Autofac ASP | 更新日期: 2023-09-27 18:05:27

直到现在,我已经在我的MVC项目中的类内完成了类型注册,但我现在正试图用模块来做。我的项目结构如下

项目。Data:包含我的entityframework类和DataContext。我重构了我的数据contect来实现一个接口(IDbContext),我通过一个autofac模块注册项目。Business:包含业务逻辑类,其中注入了IDbContext实例。类实现相应的接口,这些接口也通过autofac模块注册项目。Web:使用程序集扫描注册所有autofac模块的asp.net项目

样例代码

项目。数据

//IDbContext
public  interface IDbContext
{
    IDbSet<MyData> MyDatas { get; set; }
    ....
}
//DataContext
public class DataContext : DbContext, IDbContext
{
    public IDbSet<MyData> MyDatas { get; set; }
}
//Module
public class DataInjectionModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<DataContext>().As<IDbContext>();
    }
}

项目。业务

public interface IServeDataService
{
    IEnumerable<object> GetData();
}
public class ServeDataService : IServeDataService
{
    private IDbContext context;
    public ServeDataService()
    {
        this.context = context;
    }
    public IEnumerable<object> GetData()
    {
    }
}
public class BusinessInjectionModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<ServeDataService>().As<IServeDataService>();
    }
}

项目。Web

public partial class Startup
{
     public void RegisterContainer()
     {
         var builder = new ContainerBuilder();
         var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
         builder.RegisterAssemblyModules(assemblies.ToArray());
         builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
         builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
     }
}
public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        RegisterContainer();
    }
}
//controller
public class DataController : ApiController
{
    private IServeDataService dataService;
    public DataController(IServeDataService dataService)
    {
        this.dataService = dataService;
    }
    public async Task<IHttpActionResult> Get()
    {
        var data = dataService.GetData();
        return Ok(data);
    }
}

然而,当我尝试调用api服务时,我得到以下错误

尝试创建类型为"datcontroller"的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

我已经调试并设置了RegisterContainer方法中的断点,并被调用,我还查看了列出的程序集,列出了我的业务和数据程序集,但我的模块注册从未运行过。我做错了什么?

ASP中的Autofac模块注册.净之前

似乎您没有配置Web API来使用您的 autofacc 容器。

要使Autofac与Web API集成,你需要引用Web API集成NuGet包,注册你的控制器,并设置依赖解析器。您还可以选择启用其他功能。
>autoface - Web API文档。

为了使它工作,你必须在Autofac ASP上添加一个引用。. NET Web API Integration nuget包,并在RegisterContainer方法中添加以下行:

// Set the dependency resolver to be Autofac.
var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);