Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 如何从默认构造函数调用参数化构造函数?_C# - Fatal编程技术网

C# 如何从默认构造函数调用参数化构造函数?

C# 如何从默认构造函数调用参数化构造函数?,c#,C#,我有控制器,我在那里做DI。我有一个注入接口的构造函数。因此,我创建了一个没有任何参数的默认构造函数。因为如果我们不这样做,那么问题就来了,确保控制器有一个无参数的公共构造函数 我有以下参数化的构造函数: private IDAL DAL; private IBLL BLL; public ABCController(IDAL DalLayer, IBLL BllLayer) { DAL = DalLayer; BLL = BllLayer; } public ABCCont

我有控制器,我在那里做DI。我有一个注入接口的构造函数。因此,我创建了一个没有任何参数的默认构造函数。因为如果我们不这样做,那么问题就来了,确保控制器有一个无参数的公共构造函数

我有以下参数化的构造函数:

private IDAL DAL;
private IBLL BLL;

public ABCController(IDAL DalLayer, IBLL BllLayer)
{
    DAL = DalLayer;
    BLL = BllLayer;
}
public ABCController():this(DalLayer,BllLayer)
{

}
如何在下面的无参数构造函数中调用此构造函数?我用过:这个,但这里的问题是投掷DalLayer,BllLayer是未定义的。因为它们是在另一个构造函数中声明的:

private IDAL DAL;
private IBLL BLL;

public ABCController(IDAL DalLayer, IBLL BllLayer)
{
    DAL = DalLayer;
    BLL = BllLayer;
}
public ABCController():this(DalLayer,BllLayer)
{

}

如何解决此问题?

您可以创建一个负责创建对象的工厂。不幸的是,您没有指定DL使用哪个库。若您使用ninject,则有一个方法允许您向要注入的对象传递附加参数 例如,MyClass m=kernel.Get新构造函数参数i,2; 跟随


我不知道它在其他DL库中的外观。

这里的问题是用户使用的是Unity.MVC5,但它需要Unity.WEbAPI。用户假设Unity框架应该是相同的&它应该包含所有类型。WEbAPI、.net、Mvc、mvp等。。但事实并非如此。统一框架需要特定于需求


由于所有统一框架的解析器都不同

公共G3MSController:thisnull,null{}听起来好像您没有向DI注册IDAL或IBLL。因此DI不确定如何构造ABCController。例如,在unity中,可以使用container.RegisterType;'DAL’当然是您的IDAL接口的实现。您使用的是什么DI框架?不,我没有共享这些代码,但我已经注册了:我现在使用的是统一。从统一变为类似的东西是否太晚了;因为Unity不是最好的IoC容器…他的问题是Unity的设置,建议工厂或其他东西只是混淆了问题。在这种情况下,假设只有接口注册在Unityconfig中。之后,控制器解析程序将自动解决该问题。在上述给定的情况下,不需要默认构造函数。这只是所需的参数化构造函数。