私は MVC3 で Autofac を使用しており、気に入っています。現在、MVC4で実装しようとしています。
パッケージ マネージャー コンソール (Install-Package Autofac.Mvc4 -Pre および Install-Package Autofac.WebApi -Pre) を使用して、Autofac MVC4 および Autofac WebApi のプレリリース バージョンをインストールしました。
IoC コンテナーを次のように調整しました。
private static void SetAutofacContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<RepositoryWrapper>().As<RepositoryWrapper>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<ServiceWrapper>().As<ServiceWrapper>().InstancePerHttpRequest().InstancePerApiRequest();
// Repositories
builder.RegisterAssemblyTypes(typeof(UserRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();
// Services
builder.RegisterAssemblyTypes(typeof(UserService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
(API コントローラーにアクセスして) アプリケーションを実行すると、「Controllers.UserController' にはデフォルトのコンストラクターがありません」という例外が発生します。
コントローラーは次のようになります。
namespace Controllers
{
[Authorize]
public class UserController : ApiController
{
private ServiceWrapper _services;
public UserController(ServiceWrapper services)
{
_services = services;
}
// GET api/user/{userrequest}
public IQueryable<User> Get(UserRequest request)
{
if (ModelState.IsValid)
{
'...
}
}
}
何か不足していますか?私はそれを正しく設定しませんでしたか?どんな助けでも大歓迎です!
アップデート
私の API コントローラーは、同じソリューション内の別のプロジェクト内にあります。メインの MVC プロジェクトに API コントローラーを配置すると、機能します。Autofac で API コントローラーを API プロジェクトに登録する方法を教えてください。