我有一个使用Ninject的C#控制台应用程序。
如果我使用以下代码运行它,则控制台会显示:“ 创建了一个名为Dogy的狗,他已经7岁了”。
由于我在Program.cs的Main()-方法中将7作为参数传递给我,所以这个结果实际上对我来说很好,但是感觉就像我没有在我的“ PettModul.cs”中正确使用扩展方法“ NamedLikeFactoryMethod”一样类,因为我可以输入任何字符串和整数作为参数,并且结果仍然相同。我是否使用“ 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();
}
}
答案 0 :(得分:1)
那是因为
Bind<IPet>().To<Dog>().NamedLikeFactoryMethod((IPetFactory f) => f.GetDog("name",1))
等效于:
Bind<IPet>().To<Dog>().Named("Dog")
Ninject的对流是,一旦您用'Get'前缀命名工厂方法,该方法就将用于此方法其余部分的绑定。
NamedLikeFactoryMethod
只是为了避免使用任何硬编码的字符串。