私はMVC3のAutofacで作業していました。今私はそれをMVC4で実装しようとしています。MVC4のAutofac:コントローラにデフォルトのコンストラクタがありません
私は私のIoCコンテナを調整
(Autofac.Mvc4 -pre-のパッケージをインストールし、インストール・パッケージAutofac.WebApi -pre)をパッケージマネージャコンソールを使用してAutofac MVC4とAutofac WEBAPIのプレリリース版をインストール
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コントローラを置くと、それは機能します。誰かが私のAPIプロジェクトでAPIコントローラを登録する方法を私に教えてもらえますか?
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
レジスタApiControllers
現在のアセンブリ(プロジェクト)から:(そのアセンブリ内で)それはあなたのApiControllers
だから、次の呼び出しを探す必要がありますあなたがAutofacを伝えるRegisterApiControllers
方法で
usercontrollerクラスを表示できますか? –
どこから 'SetAutofacContainer'メソッドを呼び出しますか? – nemesv
Application_Start()in Global.asax – Vocte