8

如果已经绑定,是否可以将 Ninject 配置为不绑定依赖项。

例如

如果我们加载一个名为 Client1 的模块,其中包含:

public class Client1Module:NinjectModule
{
    public override void Load()
    {
         Bind<IService>.To<FancyService>()
    }
}

然后我们加载一个名为 Base 的模块,其中包含

public class BaseModule:NinjectModule
{
    public override void Load()
    {
          Bind<IService>.To<BasicService>()
    }
}

我们希望确保 BasicService 未绑定并且系统始终使用 FancyService。我们不会在设计时知道 FancyService 是否存在。如果找到了 Client1 模块,则加载它。

我真的不想要在每次注入时都有一堆重复的样板代码等。因为有 50-60 个依赖项都可以在客户端模块中更改。

有任何想法吗?

4

2 回答 2

7

您必须确保在 Client1Module 之后加载 BaseModule:

   public class BaseModule: NinjectModule
    {
        public override void Load()
        {
            if (!Kernel.GetBindings(typeof(IService)).Any())
            {
                Bind<IService>().To<BasicService>();
            }
        }
    }
于 2012-09-07T11:04:21.253 回答
7

如果我假设我先加载基本模块,然后在我认为我可以使用之后加载客户端模块

Rebind<IService>.To<FancyService>()

它似乎工作

于 2012-09-07T14:11:01.383 回答