Answered by:
Error in Generic Classes

Question
-
Hello,
I have a problem while using generic class. I would like to describe it with code;
public interface IBaseValidator<T> where T : BaseEntity { void CreateValidator(T entity); void UpdateValidator(T entity); void DeleteValidator(T entity); } class UserValidator : IBaseValidator<User> { public void CreateValidator(User entity) { //TODO } public void UpdateValidator(User entity) { //TODO } public void DeleteValidator(User entity) { //TODO } } public class UserManager<T> where T : BaseEntity { private IBaseValidator<T> _validator; public UserManager() { _validator = new UserValidator(); } }
for this line it gives this error : Cannot implicity convert type 'UserValidator' to 'IBaseValidator<T>'. An explicit conversion exists (are you missing a cast?)
_validator = new UserValidator();
Answers
-
Change the UserManager class to the following:
public class UserManager<T> where T : BaseEntity { private IBaseValidator<T> _validator; public UserManager(IBaseValidator<T> validator) { _validator = validator; } }
Then use the constructor of UserManager to initiate a new instance of UserValidator().
This is called dependency injection.- Proposed as answer by Niels van 't Hof Wednesday, March 1, 2017 12:04 PM
- Edited by Niels van 't Hof Wednesday, March 1, 2017 12:05 PM
- Marked as answer by İlker Yüksel Wednesday, March 1, 2017 12:41 PM
All replies
-
Change the UserManager class to the following:
public class UserManager<T> where T : BaseEntity { private IBaseValidator<T> _validator; public UserManager(IBaseValidator<T> validator) { _validator = validator; } }
Then use the constructor of UserManager to initiate a new instance of UserValidator().
This is called dependency injection.- Proposed as answer by Niels van 't Hof Wednesday, March 1, 2017 12:04 PM
- Edited by Niels van 't Hof Wednesday, March 1, 2017 12:05 PM
- Marked as answer by İlker Yüksel Wednesday, March 1, 2017 12:41 PM
-