none
Error in Generic Classes RRS feed

  • 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();

    Wednesday, March 1, 2017 11:48 AM

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.


    Wednesday, March 1, 2017 12:00 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.


    Wednesday, March 1, 2017 12:00 PM
  • Thank you so much
    Wednesday, March 1, 2017 12:42 PM