假设我有一个实现IDisposable
的对象的接口,例如我用于我的Entity Framework DbContext的那个:
public interface IMyContext : IDisposable
{
DbSet<TEntity> Set<TEntity>() where TEntity : class;
DbSet Set(Type entityType);
int SaveChanges();
IEnumerable<DbEntityValidationResult> GetValidationErrors();
DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity:class;
DbEntityEntry Entry(object entity);
}
如果我要在此界面上删除IDisposable
的声明,如下所示:
public interface IMyContext // : IDisposable -- Commented out IDisposable
{
DbSet<TEntity> Set<TEntity>() where TEntity : class;
DbSet Set(Type entityType);
int SaveChanges();
IEnumerable<DbEntityValidationResult> GetValidationErrors();
DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity:class;
DbEntityEntry Entry(object entity);
}
如果我使用这个界面来解决它,Ninject是否仍然可以处理我的DbContext?
IE:Ninject会检查正在解析的对象以检测IDisposable,即使它在接口上丢失了吗?
答案 0 :(得分:2)
这样你就可以自己验证它:
public interface IFoo { }
public class Foo : IDisposable
{
public void Dispose()
{
Console.WriteLine("got disposed");
}
}
var kernel = new StandardKernel();
kernel.Bind<IFoo>().To<Foo>().InSingletonScope();
kernel.Get<IFoo>();
kernel.Dispose();
如果你能看到&#34;被处置&#34; ..好吧......它被处理了......如果不是......它没有!
当然可以随意用静态布尔标志替换Console.WriteLine
..