これまで、MVC プロジェクト内のクラス内で型登録を行ってきましたが、モジュールでそれを実行しようとしています。私のプロジェクトは次のように構成されています
Project.Data : 私のエンティティ フレームワーク クラスと DataContext が含まれています。autofac モジュールProject.Businessを介して登録するインターフェイス (IDbContext) を実装するように datacontect をリファクタリングし ました。IDbContext インスタンスが挿入されるビジネス ロジック クラスが含まれています。クラスは、autofac モジュール Project.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 サービスを呼び出そうとすると、次のエラーが発生します。
タイプ 'DataController' のコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリック コンストラクターがあることを確認します。
RegisterContainer メソッドでデバッグしてブレーク ポイントを設定すると、それが呼び出されます。また、リストされているアセンブリも確認し、ビジネス アセンブリとデータ アセンブリがリストされていますが、モジュールの登録は実行されません。私は何を間違っていますか?