2017-10-25 7 views
3

私はこれを単に把握することはできません。 .Netコア2.0でAutofacを使用し、単純な依存関係を解決しようとしています。私の現在のコードは私が試みたすべてを反映していないように私はすべてを試したように感じる。ここでサービスに割り当てることができないタイプのAutofac DI

は、コンストラクタの

なしElucidate.Core.Application.ValuesController」タイプ に「Autofac.Core.Activators.Reflection.DefaultConstructorFinder」で見つからない私はAutofacから取得していた例外の一つであります'は利用可能なサービスとパラメーターで呼び出すことができます。パラメーター' Elucidate.Core.Data.Repository.IRepository'1 [Elucidate.Core.Model.User.IUser] rep 'of constructor' Void .ctor(Elucidate.Core。データ。リポジトリ.IRepository`

ここに私は、 ndencyはここ

public ValuesController(IRepository<IUser> rep) 

を注入し、私は間違って何をやっている

builder.RegisterType<User>().As<IUser>(); 
builder.RegisterType<CoreUserStore<User>>(); 

builder.RegisterType(typeof(Repository<User>)).As<Repository<IUser>>(); 
builder.RegisterType<EntityFrameworkModelContext<User>>(); //.As<IModelContext>(); 

私はautofacモジュール内の型を登録していますどのようにでしょうか?私はautofacには新しく、Unityには絶滅のように見える。

答えて

3

ValuesControllerコンストラクタはIRepository<IUser>と予想されていますが、オートファックで正しいタイプを配線していません。

builder.RegisterType(typeof(Repository<User>)).As<IRepository<IUser>>(); 

または代わりに、コンストラクタでの具体的なタイプのために「頼む」:

あなたが.As<IRepository...注意、実装されたインタフェースなど、具体的なリポジトリタイプを登録する必要があります。

public ValuesController(Repository<IUser> rep) 

おそらく最初の方が望ましい方法です。

builder.RegisterType<Repository<User>>().AsImplementedInterfaces(); 

実装されているすべてのインターフェイスとして具体的な種類が登録されます。

+0

ありがとうございました!私はこれを試しましたが、まだ得られない例外があります。二重括弧内の表記法はまったく問題になっていますか?これら両方の具体的な型は、これらのインタフェースを確実に実装します。 ArgumentExceptionが:タイプが 'Elucidate.Core.Data.Repository.Repository'1 [Elucidate.Core.Model.User.User]' 「Elucidate.Core.Data.Repository.IRepository'1を[サービスに割り当てません[Elucidate.Core.Model.User.IUser、Elucidate.Core.Model、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null]] '。 –

+0

@JimPhelan、あなたが今扱っているのは別の問題です。共分散。 'リポジトリ'はインタフェース 'IRepository 'に割り当てられません。Autofacなしでコードで試してみると、コンパイラエラーが発生します。 'IUser'を使わず、具体的な型のリポジトリだけを登録することをお勧めします。そうでなければ、ここで共分散を使う方法をチェックすることができます:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-generic-modifier – Xenolightning

+0

ありがとうございます@xenolightning私は持っていますそれは少しインターフェイスを再設計した後に分類しました。あなたが最初に説明したように私はAutofacなしでそれを試して、私が一度それをかなり明白にしておくべきでした。再度、感謝します。 –

関連する問題