我正在尝试按照以下步骤,将我的日志记录器作为依赖项注入到一个.NET Framework 4.7.2 Web API 项目中:https://scottdorman.blog/2016/03/17/integrating-asp-net-core-dependency-injection-in-mvc-4/。
在MVC Web应用程序中这很好用,但在WebAPI项目中则会出现“缺少无参数构造函数”错误。
如何使用默认的 Microsoft.Extensions.DependencyInjection程序集成功注入框架?
使用类似这样的注入方式时出现“缺少无参构造函数”错误:
在MVC Web应用程序中这很好用,但在WebAPI项目中则会出现“缺少无参数构造函数”错误。
如何使用默认的 Microsoft.Extensions.DependencyInjection程序集成功注入框架?
public class Startup
{
public void Configuration(IAppBuilder app)
{
var services = new ServiceCollection();
ConfigureServices(services);
var resolver = new DefaultDependencyResolver(services.BuildServiceProvider());
DependencyResolver.SetResolver(resolver);
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersAsServices(typeof(Startup).Assembly.GetExportedTypes()
.Where(t => !t.IsAbstract && !t.IsGenericTypeDefinition)
.Where(t => typeof(IController).IsAssignableFrom(t)
|| t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)));
services.AddSingleton<IMyInterface , MyClass>();
}
}
public class DefaultDependencyResolver : IDependencyResolver
{
protected IServiceProvider serviceProvider;
public DefaultDependencyResolver(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public object GetService(Type serviceType)
{
return this.serviceProvider.GetService(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return this.serviceProvider.GetServices(serviceType);
}
}
public static class ServiceProviderExtensions
{
public static IServiceCollection AddControllersAsServices(this IServiceCollection services,
IEnumerable<Type> controllerTypes)
{
foreach (var type in controllerTypes)
{
services.AddTransient(type);
}
return services;
}
}
使用类似这样的注入方式时出现“缺少无参构造函数”错误:
private IMyInterface _my;
public HomeController(IMyInterface my)
{
_my= my;
}
IMyInterface
注册到服务集合中。 - Nkosi