Ninject会在其界面上处理一个没有IDisposable的对象,但是它的实现是否正确?

时间:2015-04-09 09:32:00

标签: interface ninject idisposable

假设我有一个实现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,即使它在接口上丢失了吗?

1 个答案:

答案 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 ..