2017-09-09 11 views
0

IBaseRepoとその実装がある汎用のベースリポジトリを登録したいと思います。私はDryIOC:ジェネリック型の登録throw:自動コンストラクタの選択時に実装タイプが指定されていません

container.Register(typeof(IRepository<,>), typeof(RepositoryBase<,>), 
    made: FactoryMethod.ConstructorWithResolvableArgumentsIncludingNonPublic); 

の下のコード行を使用しますが、私はエラーの下に

InvalidOperationExceptionが出ます:型「ValuesController」のコントローラを作成しようとすると、エラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認します。

at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()", 

内部例外:

DryIoc.ContainerException自動コンストラクター選択を使用する場合に実装タイプが指定されていない。IRepository {ReturnDefault}パラメータとして "ユーザ" UserRepositoryで

:IUserRepository {ReturnDefault}をパラメータ "repository"として使用

スコープ内のValuesController {ServiceKey = DefaultKey(0)、Retur nDefault}

at DryIoc.Throw.ThrowIfNull[T](T arg, Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxx\\xxx\\DryIoc\\Container.cs:line 11562 
at DryIoc.FactoryMethod.<>c__DisplayClass5_0.<Constructor>b__0(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 4426 
at DryIoc.ReflectionFactory.ClosedGenericFactoryGenerator.GetGeneratedFactory(Request request, Boolean ifErrorReturnDefault) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8866 
at DryIoc.Container.DryIoc.IContainer.ResolveFactory(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 852 
at DryIoc.ReflectionFactory.CreateExpressionOrDefault(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8713 
at DryIoc.Factory.GetExpressionOrDefault(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8038 
at DryIoc.ReflectionFactory.CreateExpressionOrDefault(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8714 
at DryIoc.Factory.GetExpressionOrDefault(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8038 
at DryIoc.Factory.GetDelegateOrDefault(Request request) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 8162 
at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, Object serviceKey, Boolean ifUnresolvedReturnDefault, Type requiredServiceType, RequestInfo preResolveParent, IScope scope) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 524 
at DryIoc.Container.ResolveAndCacheDefaultDelegate(Type serviceType, Boolean ifUnresolvedReturnDefault) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 563 
at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, Boolean ifUnresolvedReturnDefault) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\Container.cs:line 477 
at DryIoc.WebApi.DryIocDependencyScope.GetService(Type serviceType) in C:\\Users\\Workload\\documents\\visual studio 2017\\Projects\\xxxxxx\\xxxxxx\\DryIoc\\WebApi\\DryIocWebApi.cs:line 216 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
+1

例外をフォーマットしました。あなたの質問に少し気を配り、例外情報が適切にフォーマットされていることを確認してください。 – Steven

+0

'RepositoryBase'は抽象クラスですか? – dadhi

+0

@ダディはいそれは抽象クラスです –

答えて

0

RepositoryBase<>は抽象クラスであるため、サービスを実現するために使用することができません。 IoCは魔法ではなく(少なくともDryIoc)、抽象クラスを作成することはできません。

このコードが機能するには、非抽象実装タイプを提供する必要があります。

関連する問題