如何正确使用带参数的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
在这里只是为了避免任何硬编码字符串。
我有一个 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
在这里只是为了避免任何硬编码字符串。