C# 为什么Unity不选择无参数构造函数?
我在MVC/WebAPI应用程序中向Unity注册了以下3种类型:C# 为什么Unity不选择无参数构造函数?,c#,inversion-of-control,unity-container,ioc-container,C#,Inversion Of Control,Unity Container,Ioc Container,我在MVC/WebAPI应用程序中向Unity注册了以下3种类型: container.RegisterType<ILogServices, LogServices>(); container.RegisterType<IExceptionRepository, ExceptionRepository>(); GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new Excep
container.RegisterType<ILogServices, LogServices>();
container.RegisterType<IExceptionRepository, ExceptionRepository>();
GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new ExceptionLoggerHandler(container.Resolve<ILogServices>()));
这很好。但如果我向ExceptionRepository添加一个新的构造函数,例如:
public class ExceptionRepository: BaseRepository, IExceptionRepository
{
private readonly string _connectionString;
public ExceptionRepository()
{
_connectionString = SettingManager.AppDatabaseConnection;
}
public ExceptionRepository(string connectionString)
{
_connectionString = connectionString;
}
//Rest of the implementation....
}
我得到了一个异常:InvalidOperationException-无法构造类型字符串。必须配置容器以提供此值
我知道解决方案是将传递字符串的类型注册为异常:
container.RegisterType<SqlRepo.ExceptionRepository>(new InjectionConstructor(SettingManager.AppDatabaseConnection));
container.RegisterType(新的InjectionConstructor(SettingManager.AppDatabaseConnection));
但我不明白为什么Unity在旋转类型时不选择无参数构造函数。我以为这是默认行为。看,我明白了。非常感谢你!!不管怎么说,这仍然有点神秘,因为我有其他类型,它们有完全相同的两个构造函数(parameterless&string),Unity并没有以任何方式要求我使用InjectionConstructor。只有那个。您是否尝试给
connectionString
一个值?现在它是null
。
container.RegisterType<SqlRepo.ExceptionRepository>(new InjectionConstructor(SettingManager.AppDatabaseConnection));