Ninject 프레임 워크에서 IoC를 사용하도록 일부 코드를 리팩토링하려고합니다. 지금까지 나는 전달할 생성자 매개 변수가없는 시나리오에서 클래스에 성공적으로 삽입 할 수있었습니다. 그러나 매개 변수를 전달할 때 어려움이 있습니다. 이것은 아래의 바인딩 클래스에서 세 번째 바인딩입니다. 클래스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