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字体我知道。请参阅如何使用我发布的类的更新。