我试图重构一些代码以使用IoC与Ninject框架。到目前为止,我已经成功地在没有任何构造器参数传递的场景中注入类。但是,在传递参数时遇到困难。这是下面绑定类中的第三个绑定。使用Ninject使用构造函数参数实例化一个新对象
绑定类
public class Bindings : NinjectModule
{
public override void Load()
{
Bind<ILogger>().To<Logger>();
Bind<IPlayerDatadao>().To<PlayerDatadao>();
Bind<IPlayerScores>().To<PlayerScores>();
}
}
记录器类有一个参数的构造函数,当转移到Ninject工作正常。
成功
// IoC creation
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
//Log User details
var logger = kernel.Get<ILogger>();
logger.LogVisitorDetails();
但是,我尝试下面抛出一个异常
失败
string priceString = Foo();
string pointsString = Bar();
return kernel.Get<IPlayerScores>(new[] { new ConstructorArgument("pointsString", pointsString), new ConstructorArgument("points", priceString) });
这是它的构造方法的类。
类注入
public class PlayerScores : IPlayerScores
{
[Inject]
public string points { get; set; }
[Inject]
public string price { get; set; }
public PlayerScores(string Points, string Price)
{
points = Points;
price = Price;
}
}
我真的不知道我应该如何处理参数,无论是在绑定类或注射
'PlayerScores'似乎不是一个组件(具有行为的类)。这是一个数据容器。这些类型的对象(DTO的查看模型,消息,实体)不应由DI容器构造。还要注意,即使'PlayerScopes'是一个组件(它的名字并不暗示),它应该[不会被注入运行时数据](https://www.cuttingedge.it/blogs/steven/pivot/entry.php ?ID = 99)。 – Steven