我正在尝试在控制台应用程序中使用ServiceCollection
和Autofac,填充ServiceCollection
。我阅读了文档,但没有适用于我的具体情况的指南。
我面临的问题是,当我使用接口类型询问时,构建的ServiceCollection
找不到实现。我认为AutoFac没有填充ServieCollection
。
Program.cs
using System.Reflection;
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Core.Interfaces;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
var serviceProvider = new ServiceCollection()
.AddLogging(cfg => cfg.AddConsole())
.Configure<LoggerFilterOptions>(cfg => cfg.MinLevel = LogLevel.Information)
.AddAutofac(cfg =>
{
cfg.RegisterAssemblyTypes(Assembly.Load("Core")).AsImplementedInterfaces();
})
.BuildServiceProvider();
var markDownParser = serviceProvider.GetRequiredService<IMarkDownParser>();
MarkDownParser.cs
namespace Core;
public class MarkDownParser : IMarkDownParser
{
private readonly ILogger<MarkDownParser> _logger;
public MarkDownParser(ILogger<MarkDownParser> logger)
{
_logger = logger;
}
}
IMarkDownParser.cs
namespace Core.Interfaces;
public interface IMarkDownParser
{
object Parse(string text);
}
错误:
Unhandled exception. System.InvalidOperationException: No service for type 'Core.Interfaces.IMarkDownParser' has been registered.
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Program.<Main>$(String[] args) in /home/amir/RiderProjects/git-blog/ConsoleApp/Program.cs:line 20
IMarkDownParser
和MarkDownParser
的命名空间是什么? - D-Shih