8

リポジトリの助けを借りた作業単位とコンテナとしてAutofacを使用してWeb APIを作成しています。依存関係は、24時間前に完全に注入されたが、突然、私は今日の仕事を始めたとき、私は「メッセージ」WebApi DI Autofac - コントローラにパラメータのないpublicコンストラクタがあることを確認してください。

エラーを受け取るに保管なっていた:「エラーが発生しました。」、「ExceptionMessage」:「しようとしたときにエラー が発生しました。。タイプ のコントローラを作成するための「SearchController」コントローラは、パラメータなし publicコンストラクタを持っていることを確認してください」、 『ExceptionType』: 『System.InvalidOperationExceptionが』、

私は私の署名とどのように私が含まれますタイプを登録していて、誰かが何のmiを指摘できたら本当にうれしい私のコードで間違っているだろう。私のWeb APIコントローラで

、私は仕事の

private IUnitOfWork<Listing> _unitOfWork = null; 
public SearchController(IUnitOfWork<Listing> unitOfWork) 
{ 
    _unitOfWork = unitOfWork; 
} 

ユニットは、リポジトリを作成するために、ジェネリック型パラメータを取りました。私WebApiConfig.csで

は、私は>私はIUnitOfWork <に取るコンストラクタを使用するSearchControllerを登録してい

builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); 
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency(); 
builder.RegisterType(typeof(SearchController)).UsingConstructor(typeof(IUnitOfWork<Listing>)); 

以下のようなタイプを登録しています。 Mocked単体テストを追加する前にうまくいっていましたが、何らかの目的でこのエラーが発生しています。私はまた、DependencyResolverを登録した

var container = builder.Build(); 
var resolver = new AutofacWebApiDependencyResolver(container); 
config.DependencyResolver = resolver; 

答えて

6

がまだ答えのないこの質問にかなりの数のupvotesがあり、私はそれがうまく作られたどのように私は正確に覚えていないが、私は持っている最新の技術を共有したいと多くのプロジェクトで完璧に動作しています。

1)これは私が仕事の私の一般的なrepsoitoryとユニット

builder.RegisterType(typeof(YourContextInRepository)); 
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); 
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)); 

2)これは私のセットアップ私のWebAPIの

// Set the dependency resolver for Web API. 
var webApiResolver = new AutofacWebApiDependencyResolver(container); 
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; 

3の依存リゾルバが)それを登録するにはどのようにあるの登録方法です

// Set MVC DI resolver to use our Autofac container 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

このアプローチはMVCとWebAPIコントローラで動作しますy do

private IUnitOfWork<Listing> _uow; 
public SearchController(IUnitOfWork<Listing> uow) 
{ 
    _uow = uow; 
} 

今後誰かを助けることを願っています。

+1

アリとそれを構成するには、どのように良いサンプルが、私はあなたの例を試してみましたが、私はWebAPIのために同じ「パラメーターなしのパブリックコンストラクタ」エラーが発生します。 MVC AutoFacコードを使用した場合と同じメッセージです。私はMVCアプリでこれを持っていますが、これを紛失してしまいます。共有できる他の方向はありますか? –

1

私は同じ問題を抱えていました。問題は、MVCコントローラ用でAPIではなく、ContainerBuilder()オブジェクト用のAutofacコードサンプルを使用していたことでした。

Here is ApiController

関連する問題