我已经开始使用ASP.NET 5 vNext了,我正在努力将config.json中的选项传递给我的WebApi控制器使用的中间件服务。
以下是我的中间件服务的片段:
public class MyService : IMyService
{
public MyService(IOptions<MyOptions> settings)
{
var o = settings.Options;
}
}
这是我使用中间件服务的WebApi控制器:
public class MyController : Controller
{
private IMyService _myService;
public TestController(IMyService service)
{
_myService = service;
}
}
在Startup.cs中我正在阅读选项:
services.AddOptions();
services.Configure<MyOptions>(Configuration);
我正在努力的是如何将实例注册到IMyService,以便将其传递给控制器的构造函数(如何获取IOptions)?
services.AddInstance<IMyService>(new MyService(XXXXX));
如下所示,我确实试图同时使用
services.AddTransient<MyService>();
和
services.AddSingleton<MyService>();
但是在这两种情况下我都看到以下错误:
处理请求时发生未处理的异常。
InvalidOperationException:无法解析类型的服务 &#39; MyApp.Services.IMyService&#39;在尝试激活时 &#39; MyApp.Controllers.TestController&#39 ;. Microsoft.Framework.DependencyInjection.ActivatorUtilities.GetService(的IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)
感谢您的帮助!
答案 0 :(得分:0)
不要将其注册为实例。相反,只需根据您的要求将其添加为Scoped / Transient / Singleton,让依赖注入尽其所能;
services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
services.AddScoped<IMyService, MyService>();
答案 1 :(得分:0)
例如,您可以添加到代码为
的Startup.csrm(list = ls())
library(shiny)
library(rCharts)
ui <- fluidPage(
titlePanel("Count Report "),
h4("This application shows product data"),
sidebarLayout(
sidebarPanel(
selectizeInput("product","Product:",c("ALPHA","BRAVO","all"), selected="all")
),
mainPanel(
h4("rChart works!"),
showOutput("chart", "highcharts")
)
)
)
server <- function(input, output) {
x <- data.frame(Category=factor(c("ALPHA", "ALPHA","BRAVO","ALPHA","ALPHA")),
YYYYMM= factor(c("2/1/2015","3/1/2015","4/1/2015","5/1/2015","6/1/2015")),
COUNT=c(44,22,37,76,97))
output$chart <- renderChart2({
a <- hPlot(COUNT ~ YYYYMM, data=x, type="line") ######### doesnt WORK!
return (a)
})
}
shinyApp(ui, server)
我可以向您保证,您可以使用Singleton或Transient。
如果您有兴趣,可以在https://github.com/aspnet/Docs/issues/24找到更多信息。
另外,目前Autofac为ASP.NET 5创建了DI http://alexmg.com/autofac-4-0-alpha-1-for-asp-net-5-0-beta-3/