나는 추상적 인 공장을 가지고 있습니다. 오늘 저는 그걸 묶어서 묶고 싶었습니다. 가장 좋은 방법은 무엇인지 모르겠지만 이런 식으로했습니다. 그럼 난 힘들어 나는 공급자 방식대로 노력했다. 그래서 나는 공급자 인터페이스를 구현했다. 문제는, 내가 이런 방식으로 호출한다는 것입니다. kernel.Bind<IModelValidator>().ToProvider<ModelValidatingFactory>()
Ninject 팩토리를 만드는 방법
ModelValidatingFactory의 IModelValidatingFactory insted를 사용할 수 없으므로 factory (list)가 무엇인지 매개 변수를 지정해야합니다. IModelValidator 인터페이스를위한 팩토리를 만들고 싶습니다. 클래스 유형을 키로 사용하고 싶습니다. 생성자에 대한 매개 변수를 어떻게 제공 할 수 있습니까? 아니면 작동하게하는 가장 좋은 방법은 무엇입니까? 유형을 사용하면 유형을 사용할 필요가 없기 때문에 키를 사용해야합니까?
Ninject의 메소드를 보았지만 이해가되지 않습니다. 더 많은 구현 가능성을 보았습니다. 너 나 한테 뭐라고 조언 해?
// this is what I would like to try, but there are some error with this. I can not reference to the type, and I can not give factory
public class ModelValidatingFactory : Provider<IModelValidator>, TandoCare.Desktop.Infrastructure.ModelValidating.IModelValidatingFactory
{
public IDictionary<Type, Func<IModelValidator>> validationFactory = new Dictionary<Type, Func<IModelValidator>>();
public ModelValidatingFactory(IDictionary<Type, Func<IModelValidator>> factory)
{
//validationFactory.Add(typeof(PatientModel),() => new PatientRegistrationValidator());
validationFactory = factory;
}
protected override IModelValidator CreateInstance(Ninject.Activation.IContext context)
{
return validationFactory[context.Request.Target.Type]();
}
public IModelValidator GetValidator(object model)
{
Type type = model.GetType();
return validationFactory[type]();
}
public IModelValidator this[object lookedType]
{
get
{
Type type = lookedType.GetType();
return validationFactory[type]();
}
}
}
이렇게하면 .ToFactory 메서드를 사용해야합니까?
내 문제에 대한 공장을 어떻게 만들면 좋을까요? 가장 좋은 해결책은 어디서나 생성자를 던지거나 속성에 주입해야합니다. – user1693057
@ user1693057 : 공장을 소비하려는 클래스에 대해 이야기하고 있습니까? 나는 개인적으로 생성자 주입을 선호하지만 각각의 장단점을 찾기 위해 "Constructor vs Property Injection"이라는 단어를 사용할 수 있습니다. – StriplingWarrior