概述
在我的应用程序( .net core 1.1 )中,我有以下类和接口:
class RequestingUserData
interface IQuery<TResult>
interface IQueryWithUser<TResult> : IQuery<TResult>
class UserSearchQuery : IQueryWithUser<RequestingUserData>
interface IQueryHandler<in TQuery, TResult> where TQuery : IQuery<TResult>
interface IUserSearchQueryHandler<T> : IQueryHandler<T, RequestingUserData> where T : IQueryWithUser<RequestingUserData>
class UserSearchQueryHandler : IUserSearchQueryHandler<UserSearchQuery>
作为依赖注入我在ConfigureServices(IServiceCollection services)
方法中使用IServiceCollection
。
使用从IServiceProvider
:
IServiceCollection
接口在运行时解析类
//Somewhere in ConfigureServices
services.AddScoped<IServiceCollection>(x => services);
//SomeClass in which I want to resolve
SomeClass(IServiceCollection services){// SomeClass's constructor
_serviceProvider = services.BuildServiceProvider();
}
//Later in SomeClass
var resolved = _serviceProvider.GetService<IQueryHandler<IQueryWithUser<RequestingUserData>, RequestingUserData>>(); // this becomes null
我想要实现的目标
我希望在上面的代码段的最后一行中获取UserSearchQueryHandler
类实例。
我相信它不起作用,因为没有类明确地实现IQueryHandler<IQueryWithUser<RequestingUserData>, RequestingUserData>
。
但是,有一个实现IQueryWithUser<RequestingUserData>
的类,所以应该可以这样做。
我尝试了什么
这是我将我的课程添加到服务的方式:
services.AddScoped<IQueryHandler<UserSearchQuery, RequestingUserData>, UserSearchQueryHandler>();
我也试过这样做:
services.AddScoped<IQueryHandler<IQueryWithUser<RequestingUserData>, RequestingUserData>, UserSearchQueryHandler>();
但它会产生编译错误(这是合理的)。
问题
我可以做我想到的事吗?如果不是,您能否看到我如何重新排列界面以使其成为可能?