【发布时间】:2019-03-11 23:32:17
【问题描述】:
我是 .NET Core 的新手,但我一直在 ASP.NET 中使用 Autofac,我正在尝试使用 Autofac 配置 as I did in ASP.NET 注册控制器。我阅读了一堆代码示例,但似乎 .NET Core 的 Autofac 手册不适用于 .NET Core 2.1。
我的目标是使用 Autofac 配置从另一个项目加载控制器。有什么可行的例子吗?
我在 .NET 4.7 中使用 Autofac.Configuration 将控制器作为插件注入,但在 .NET Core 2.1 中包含 Autofac.Configuration 失败 我在其他项目中创建了小型 ASP.NET Core 项目和几个控制器。这个想法是通过 Autofac.Configuration 将这些控制器包含在 ASP.NET Core 项目中。
这是我的 autofac.json 配置文件
{
"components": [{
"type": "Controllers.UserController, Controllers",
"services": [{"type": "Common.IController, Common"}]
}]
}
这是来自 Startup.cs 的代码
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddControllersAsServices();
var builder = new ContainerBuilder();
var mseConfig = new ConfigurationBuilder();
mseConfig.AddJsonFile("autofac.json");
var module = new ConfigurationModule(mseConfig.Build());
builder.RegisterModule(module);
builder.Populate(services);
var container = builder.Build();
return new AutofacServiceProvider(container);
}
我收到的错误是“System.InvalidOperationException: '找不到类型'Controllers.UserController, Controllers'。它可能需要装配资格,例如“MyType, MyAssembly”。'”
Controllers.dll 文件存在于 ASP.NET Core 项目的 bin 文件夹中。
【问题讨论】:
-
只是一个问题,为什么不在 .NET Core 中使用提供的 DI 容器?
-
@ChirdeepTomar 因为原生 DI 不支持属性注入等许多功能。
-
@ChirdeepTomar:因为reasons。
-
@ChirdeepTomar - 就像 Alex Herman 所说,原生 DI 不支持许多花哨的功能。
-
为了帮助您解决问题,我们需要更多信息。 The "How to ask a question" docs 可以在这里为您提供帮助,you cross-posted in the issue 也可以为您提供一些帮助:最小的重现,带有堆栈跟踪的完整异常(如果有),您尝试过的事情,您寻找答案的地方。一个准确的标题也会有所帮助 - 并不是 Autofac.Config 不能与 .NET Core 一起使用,而是您无法让动态加载的控制器工作。
标签: .net asp.net-core .net-core autofac asp.net-core-2.1