Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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中获取构造函数参数名#_C#_Dependency Injection_Ninject - Fatal编程技术网

C# 如何在C中获取构造函数参数名#

C# 如何在C中获取构造函数参数名#,c#,dependency-injection,ninject,C#,Dependency Injection,Ninject,我想知道如何从DataAccess的默认构造函数中获取参数名“kernel” _kernel.Get<DataAccess>(new Parameter("kernel", _kernel, true)); _kernel.Get(新参数(“kernel”,_kernel,true)); 我希望避免使用这些“神奇的字符串”,并得到如下结果: _kernel.Get<DataAccess>(new Parameter(DataAccess.Constructor.ker

我想知道如何从DataAccess的默认构造函数中获取参数名“kernel”

_kernel.Get<DataAccess>(new Parameter("kernel", _kernel, true));
_kernel.Get(新参数(“kernel”,_kernel,true));
我希望避免使用这些“神奇的字符串”,并得到如下结果:

_kernel.Get<DataAccess>(new Parameter(DataAccess.Constructor.kernel, _kernel, true));
\u kernel.Get(新参数(DataAccess.Constructor.kernel,\u kernel,true));

关于

也许我误解了,您没有解释为什么需要使用命名参数。例如,您不需要提供内核作为参数。默认情况下,它绑定到
IKernel
,因此如果您的
DataAccess
类如下所示:

public class DataAccess {
    public DataAccess(IKernel kernel) {
    }
}
然后对
Get
的调用应自动注入内核:

_kernel.Get<DataAccess>();
让ninject通过绑定来解决依赖关系:

_kernel.Bind<IMyDependency>().To<MyDependency>();
\u kernel.Bind().To();

也许我误解了,您没有解释为什么需要使用命名参数。例如,您不需要提供内核作为参数。默认情况下,它绑定到
IKernel
,因此如果您的
DataAccess
类如下所示:

public class DataAccess {
    public DataAccess(IKernel kernel) {
    }
}
然后对
Get
的调用应自动注入内核:

_kernel.Get<DataAccess>();
让ninject通过绑定来解决依赖关系:

_kernel.Bind<IMyDependency>().To<MyDependency>();
\u kernel.Bind().To();

您为什么不能使用
nameof
?假设它是唯一的构造函数,您可以使用反射获取名称:
typeof(DataAccess).GetConstructors()[0].GetParameters()[0].name
@theBeardellama,
nameof
不能用于获取参数name@haim770嗯,你写的这个表达式很有趣,但是如果我们改变参数的顺序,它就会中断。这个解决方案可行,但我想要更干净的D谢谢you@IgorJakovljevic,我同意这远远不够理想。理想情况下,Ninject必须与传递给匹配构造函数的参数相匹配。您为什么不能使用
nameof
?假设它是唯一的构造函数,您可以使用反射来获取名称:
typeof(DataAccess).GetConstructors()[0].GetParameters()[0]。name
@thebearedllama,
nameof
不能用于获取参数name@haim770嗯,你写的这个表达式很有趣,但是如果我们改变参数的顺序,它就会中断。这个解决方案可行,但我想要更干净的D谢谢you@IgorJakovljevic,我同意这远远不够理想。理想情况下,Ninject必须匹配传递给匹配构造函数的参数。