到目前为止,我已经在我的 MVC 项目中的一个类中完成了类型注册,但我现在正在尝试使用模块来完成它。我的项目结构如下
Project.Data:包含我的实体框架类和 DataContext。我已经重构了我的 datacontect 以实现我通过 autofac 模块 Project.Business注册的接口(IDbContext) :包含注入 IDbContext 实例的业务逻辑类。类实现相应的接口,这些接口也通过 autofac 模块 Project.Web注册:asp.net 项目,它使用程序集扫描来注册所有 autofac 模块
示例代码
项目数据
//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>();
}
}
项目网站
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 服务时,出现以下错误
尝试创建类型为“DataController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。
我已经在 RegisterContainer 方法中调试并设置了断点并被调用,我还查看了列出的程序集并列出了我的业务和数据程序集,但我的模块注册从未运行。我究竟做错了什么?