依赖注入 - 解决复杂的接口实现

时间:2017-11-22 10:37:16

标签: c# .net-core

概述

在我的应用程序( .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>();

但它会产生编译错误(这是合理的)。

问题

我可以做我想到的事吗?如果不是,您能否看到我如何重新排列界面以使其成为可能?

0 个答案:

没有答案
相关问题