Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Unity不选择无参数构造函数?_C#_Inversion Of Control_Unity Container_Ioc Container - Fatal编程技术网

C# 为什么Unity不选择无参数构造函数?

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

我在MVC/WebAPI应用程序中向Unity注册了以下3种类型:

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));