如何正确使用带参数的Ninject的NamedLikeFactoryMethod?

How to use Ninject's NamedLikeFactoryMethod with parameters correctly?

我有一个 C# 控制台应用程序,我在其中使用 Ninject。

如果我 运行 使用以下代码,控制台会显示:“创建了一只名为 Dogy 的狗,他今年 7 岁”。

这个结果对我来说很好,因为我在 Program.cs 的 Main()- 方法中传递了 7 作为参数,但感觉我没有正确使用扩展方法 "NamedLikeFactoryMethod"我的 "PettModul.cs" class 因为我可以输入任何字符串和整数作为参数,结果仍然相同。我使用 "NamedLikeFactoryMethod" 错了吗?如果可以,如何正确使用?

我有以下代码:

Program.cs

class Program
{
    static void Main(string[] args)
    {
        var kernel = new StandardKernel();
        kernel.Load(new TierModul());
        var factory = kernel.Get<IPetFactory>();
        var dogy = factory.GetDog("Dogy",7);            
        Console.ReadLine();
    }
}

Dog.cs

public class Dog: IPet
{
    private readonly string _name;
    private readonly int _age;        

    public Dog(string name, int age)
    {
        _age= age;
        _name = name;
        Console.WriteLine($"A Dog with the name {_name} was created, he is{_age} years old");
    }
}

IPetFactory.cs

 public interface IPetFactory
{
    IPet GetDog(string name, int age);
    IPet GetCat(string name);
}

PetModul.cs

public class PetModul : NinjectModule
{
    public override void Load()
    {            
        Bind<IPet>().To<Dog>().NamedLikeFactoryMethod((IPetFactory f) => f.GetDog("name",1));           

        Bind<IHaustierFactory>().ToFactory();
    }
}

那是因为

Bind<IPet>().To<Dog>().NamedLikeFactoryMethod((IPetFactory f) => f.GetDog("name",1))

相当于:

Bind<IPet>().To<Dog>().Named("Dog")

Ninject 的对流是,一旦你用 'Get' 前缀命名你的工厂方法,那么这个方法将用于绑定命名为这个方法的其余部分。

NamedLikeFactoryMethod 在这里只是为了避免任何硬编码字符串。