我試圖重構一些代碼以使用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