2014-01-22 62 views
0
public partial class CTMSEntitiesModel : OpenAccessContext, ICTMSEntitiesModelUnitOfWork 
{ 
    public CTMSEntitiesModel(string connection) 
:base(connection, backend, metadataSource) 
{ } 
    // there are more IQueryable requests here 
} 

public interface ICTMSEntitiesContext : ICTMSEntitiesModelUnitOfWork 
{ 
    FetchStrategy FetchStrategy { get; set; } 
} 

public interface ICTMSEntitiesModelUnitOfWork : IUnitOfWork 
{ 
    //all the IQueryable requests are here 
} 

我需要将ICTMSEntitiesContext绑定到CTMSEntitiesModel。我会怎么做呢?当我这样做时,我做错了什么?它抛出一个InvalidCastException。Ninject无效投射异常

kernel.Bind(typeof(CTMSDAL.ICTMSEntitiesContext)).To(typeof(CTMSDAL.CTMSEntitiesModel)).InRequestScope() 
      .WithConstructorArgument("connection", System.Configuration.ConfigurationManager.ConnectionStrings["CTMS_MVCConnection"].ConnectionString); 

我将不胜感激您提供的所有帮助! 谢谢, Safris

+1

您的CTMSEntitiesModel实现了ICTMSEntitiesModelUnitOfWork而不是ICTMSEntitiesContext。在内核中设置合适的接口。绑定(..行或实现ICTMSEntitiesContext与你的上下文? –

回答

3

您必须在CTMSEntitiesModel类中实现ICTMSEntitiesContext。否则,无法将类的实例转换为目标接口。

假设你正在使用的OpenAccess和上下文类可以自动生成,我建议你添加的接口实现到新的部分班级在不同的项目文件避免了原后失去了自定义代码的事实文件被重新生成:

public partial class CTMSEntitiesModel : ICTMSEntitiesContext 
{ 
    // FetchStrategy property is already defined 
} 
+0

因此,CTMSEntitiesModel在一个文件中实现ICTMSEntitiesContext,在另一个文件中实现ICTMSEntitiesModelUnitOfWork。这会是一个问题吗?它们都是 – safriss