C# Ninject WithConstructorArgument:没有匹配的绑定可用,并且类型不可自绑定

C# Ninject WithConstructorArgument:没有匹配的绑定可用,并且类型不可自绑定,c#,exception-handling,dependency-injection,ninject,ninject-2,C#,Exception Handling,Dependency Injection,Ninject,Ninject 2,我对WithConstructorArgument的理解可能是错误的,因为以下内容不起作用: 我有一个服务,我们称之为MyService,它的构造函数接受多个对象,还有一个名为testEmail的字符串参数。对于此字符串参数,我添加了以下Ninject绑定: string testEmail = "test@example.com"; kernel.Bind<IMyService>().To<MyService>().WithConstructorArgument("te

我对WithConstructorArgument的理解可能是错误的,因为以下内容不起作用:

我有一个服务,我们称之为MyService,它的构造函数接受多个对象,还有一个名为testEmail的字符串参数。对于此字符串参数,我添加了以下Ninject绑定:

string testEmail = "test@example.com";
kernel.Bind<IMyService>().To<MyService>().WithConstructorArgument("testEmail", testEmail);
我有所有构造函数参数类型的标准绑定。只有“string”没有绑定,HttpContextBase有一个稍微不同的绑定:

kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(new HttpContext(new MyHttpRequest("", "", "", null, new StringWriter()))));
声明如下:

var myService = kernel.Get<MyService>();
然后,您应该通过注册的接口(
IMyService
)来解析它:

var myService=kernel.Get();

虽然nemesv有正确的响应,但我遇到了相同的错误,我的解决方案是在我的/bin中有一个恶意DLL。我已经重构并删除/移动了一些仍然存在于旧DLL中的类。解决方案-删除旧的DLL。

能否显示目标MyService构造函数?指定的名称必须等于cinstructor参数的名称。@KonstantinVasilcov请参阅上面的“我的更新”。我刚刚为我的构造函数添加了代码。你有每个接口的绑定吗?@KonstantinVasilcov我检查了两遍,是的,我有。它们看起来都像kernel.Bind().To();除了HttpContextBase绑定之外,我现在在上面问题的更新部分显示了它。@nemesv就是它。我将类而不是接口传递给kernel.Get()。非常感谢你,尼梅斯夫!您应该将您所写的内容重新发布为答案,以便我可以将其标记为问题的解决方案。此外,请确保类注入没有意外标记为抽象;)。这个错误不会告诉你。
kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(new HttpContext(new MyHttpRequest("", "", "", null, new StringWriter()))));
public class MyHttpRequest : SimpleWorkerRequest
{
    public string UserHostAddress;
    public string RawUrl;

    public MyHttpRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output)
    : base(appVirtualDir, appPhysicalDir, page, query, output)
    {
        this.UserHostAddress = "127.0.0.1";
        this.RawUrl = null;
    }
}
var myService = kernel.Get<MyService>();
string testEmail = "test@example.com";
kernel.Bind<IMyService>().To<MyService>()
      .WithConstructorArgument("testEmail", testEmail);
var myService = kernel.Get<IMyService>();