Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非静态字段、方法或属性需要对象引用_C#_Asp.net Mvc 3 - Fatal编程技术网

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

C# 非静态字段、方法或属性需要对象引用,c#,asp.net-mvc-3,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,

我通读了关于同一问题的其他主题,但不确定我是否应该在我的例子中找到一个实例

我有以下资料:

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
 }
}
重置模块包含在:

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);
 }
public类ScormModuleRepository:Repository,IScormModuleRepository
{
public void ResetModule(int-id,int-userScormModuleId,int-currentUser)
{
使用(SqlConnection conn=newsqlconnection(ZincModelContainer.CONNECTIONSTRING))
{
使用(SqlCommand cmd=conn.CreateCommand())
{
conn.Open();
cmd.CommandType=System.Data.CommandType.StoredProcess;
cmd.CommandText=“[ZINK].[ResetUserScormModuleData]”;
SqlParameter param=newsqlparameter(“@userId”,System.Data.SqlDbType.Int);
参数值=id;
cmd.Parameters.Add(param);
SqlParameter param2=新的SqlParameter(“@userScormModuleId”,System.Data.SqlDbType.Int);
param2.Value=userScormModuleId;
cmd.Parameters.Add(param2);
SqlParameter param3=新的SqlParameter(“@currentUser”,System.Data.SqlDbType.Int);
参数3.值=当前用户;
cmd.Parameters.Add(param3);
cmd.ExecuteNonQuery();
}
}
}
}
公共接口ISCormModule存储库:IRepository
{
void ResetModule(int-id,int-userScormModuleId,int-currentUser);
}
整个错误:错误1非静态字段、方法或属性“Zinc.Repositories.Scorm.IScormModuleRepository.ResetModule(int,int,int)”C:\TFSPreview\Zinc\Project\ServiceImplements\TrainingService.cs 501 8需要对象引用

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


谢谢

您需要实现
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);
    }
}
var repository = new ScormModuleRepository(...);
var trainingService = new TrainingService(repository);
trainingService.ResetModule(...);
您现在可以像这样使用
培训服务

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);
    }
}
var repository = new ScormModuleRepository(...);
var trainingService = new TrainingService(repository);
trainingService.ResetModule(...);

您可能正在从静态方法调用非静态方法。是这样吗?您对静态成员和实例成员之间的区别了解多少?您试图在没有实例的情况下调用实例方法。从外观上看,您的
TrainingService
应该有一个对
ScormModuleRepository
实例的引用。什么是
zn
?锌存储库是什么?什么是zn.Repositories.Scorm.IScormModuleRepository?@Sandeep:它是否来自静态方法没有区别。重要的是,他试图调用一个实例方法,而没有引用来调用它。@DanielHilgarth非常感谢您的礼貌。我想调用ScormModuleRepository中的ResetModule,我在我的OP中的第二块代码中发布了它:)请参阅OP,thanks@charlie_cat字体我知道。请参阅如何使用我发布的类的更新。