Ninject WithConstructorArgument不覆盖类型的全局绑定?

时间:2013-07-31 20:23:38

标签: c# dependency-injection ninject constructor-injection

我有一般的绑定,其中一个就是:

Bind<IHasher>().To<SHA256Hasher>();

这很有效,因为有几个类使用这个版本。然而,有一个或两个控制器需要另一种类型的哈希来使用哈希与第三方,例如期望md5哈希的gravatar。那么我就是这样做的:

Bind<ISomeController>().To<SomeController>().Named("SomeController").WithConstructorArgument("emailHasher", new Md5Hasher());

然后我的控制器看起来像:

    public class SomeController : Controller
    {
        private IHasher emailHasher;

        public CampaignController(IHasher emailHasher)
        {
            this.emailHasher = emailHasher;
        }
    }

调试时我希望IHasher是Md5Hasher,但它是Sha256Hasher。那么这个预期的行为是什么方式使它使用被覆盖的类型?

1 个答案:

答案 0 :(得分:1)

我想这是一个MVC控制器。 MVC框架将解析SomeController而不是ISomeController。因此,您的绑定不适用,但Ninject将使用隐式绑定SomeController ToSelf

SomeController ToSelf创建绑定。