Autofac解析依赖报错:无法注入Func<string>类型构造参数
问题原因与解决方法
报错原因
你的GitRepositoryFactory构造函数依赖的是Func<string>类型的委托,而非直接的string类型。你传入的TypedParameter指定的是string类型参数,Autofac无法自动将字符串转换为Func<string>委托,因此找不到匹配的构造函数参数,导致解析失败。
解决方法
有两种常见方式可以正确注入Func<string>参数:
方式一:注册GitRepositoryFactory时直接指定Func<string>参数
将字符串包装成返回它的委托,传递给WithParameter:
var builder = new ContainerBuilder(); builder.RegisterModule<GitModule>(); builder.RegisterType<GitRepositoryFactory>().As<IGitRepositoryFactory>() .WithParameter( new TypedParameter(typeof(Func<string>), () => "https://bitbucket/scm/cmr/413.git"));
方式二:单独注册Func<string>委托
先向容器注册一个返回目标字符串的Func<string>实例,Autofac会自动将其注入到GitRepositoryFactory的构造函数中:
var builder = new ContainerBuilder(); builder.RegisterModule<GitModule>(); // 注册返回固定字符串的Func<string> builder.RegisterInstance<Func<string>>(() => "https://bitbucket/scm/cmr/413.git"); // 正常注册工厂类 builder.RegisterType<GitRepositoryFactory>().As<IGitRepositoryFactory>();
额外检查
确保GitModule中已经正确注册了IGitCommands接口的实现类,否则即使解决了Func<string>的问题,仍会出现其他解析异常。
内容的提问来源于stack exchange,提问作者bas
相关产品推荐
相关产品推荐

