如何在可重用的Razor类库中的控制器中注入服务

Ren*_*eza 1 razor asp.net-core-mvc asp.net-core-2.1

我正在使用Razor类库来制作可在多个ASP.NET Core MVC项目中使用的可重用的复杂视图(包括其控制器和几个View组件)。问题是控制器使用依赖项注入(名为“ GatewayProxy”和字符串本地化的自定义服务)。将服务注入RCL内的控制器的正确方法是什么?

这是我的RCL的结构:

在此处输入图片说明

这是例外:

在此处输入图片说明

Sho*_*hoe 5

您提到了如何通过将依赖项添加到主项目的Startup.cs来解决此问题的方法。但是请注意,此可重用库的任何使用者可能都不记得(或不知道)您的库需要哪些依赖项。

您可以解决此问题的方法是IServiceCollection在Rcl中创建一个进行依赖项注册的扩展。

public static void AddMyRclServices(this IServiceCollection serviceCollection, IConfiguration config)
{
    serviceCollection.AddTransient<IRclService1, RclService1>();
    serviceCollection.AddScoped<IRclService2, RclService2>();
}
Run Code Online (Sandbox Code Playgroud)

然后在Startup.cs您的MVC项目中调用扩展程序

using Rcl.Extensions

public void ConfigureServices(IServiceCollection services)
{
    services.AddMyRclServices(config);
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是最好的方法,但并不完美,因为 RCL 的使用者仍然必须知道调用 services.AddMyRclServices(config)。我希望 RCL 有一个 Startup.cs。 (2认同)