非静态字段,方法或属性需要对象引用

时间:2012-11-23 12:19:12

标签: c# asp.net-mvc-3

我在同一个问题上阅读了其他主题,但不确定我是否应该在我的实例中解决问题。

我有以下内容:

public interface ITrainingService : IDependency
{
   void ResetModule(int id, int userScormModuleId, int currentUser);
}

public class TrainingService : ITrainingService
{
 public void ResetModule(int id, int userScormModuleId, int currentUser)
 {
   Zinc.Repositories.Scorm.IScormModuleRepository.ResetModule(id, userScormModuleId, currentUser);  //i get the error here
 }
}

ResetModule包含在:

public class ScormModuleRepository : Repository<ScormModule>, IScormModuleRepository
{
   public void ResetModule(int id, int userScormModuleId, int currentUser)
   {
     using (SqlConnection conn = new SqlConnection(ZincModelContainer.CONNECTIONSTRING))
     {
         using (SqlCommand cmd = conn.CreateCommand())
         {
           conn.Open();
           cmd.CommandType = System.Data.CommandType.StoredProcedure;
           cmd.CommandText = "[Zinc].[ResetUserScormModuleData]";

           SqlParameter param = new SqlParameter("@userId", System.Data.SqlDbType.Int);
           param.Value = id;
           cmd.Parameters.Add(param);

           SqlParameter param2 = new SqlParameter("@userScormModuleId", System.Data.SqlDbType.Int);
           param2.Value = userScormModuleId;
           cmd.Parameters.Add(param2);

           SqlParameter param3 = new SqlParameter("@currentUser", System.Data.SqlDbType.Int);
           param3.Value = currentUser;
           cmd.Parameters.Add(param3);

           cmd.ExecuteNonQuery();
        }
     }
  }
}
 public interface IScormModuleRepository : IRepository<ScormModule>
 {
   void ResetModule(int id, int userScormModuleId, int currentUser);
 }

整个错误:错误1非静态字段,方法或属性'Zinc.Repositories.Scorm.IScormModuleRepository.ResetModule(int,int,int)'C:\ TFSPreview \ Zinc \需要对象引用Project \ ServiceImplementations \ TrainingService.cs 501 8 Zinc

我不明白?我如何从一个实例工作?或者我必须实例化什么或者是我的另一种性质的问题?

感谢

1 个答案:

答案 0 :(得分:1)

您需要一个实现IScormModuleRepository的类的实例。使用您的代码,应该调用哪种方法? IScormModuleRepository是一个接口,它甚至不包含您尝试调用的方法的实现...

你需要这样的东西:

public class TrainingService : ITrainingService
{
    IScormModuleRepository _repository;

    public TrainingService(IScormModuleRepository repository)
    {
        _repository = repository;
    }

    public void ResetModule(int id, int userScormModuleId, int currentUser)
    {
        _repository.ResetModule(id, userScormModuleId, currentUser);
    }
}

您现在可以像这样使用TrainingService

var repository = new ScormModuleRepository(...);
var trainingService = new TrainingService(repository);
trainingService.ResetModule(...);