Interface Ninject是否会处理一个不';它没有IDisposable';s接口,但在其上执行';什么是实施?

Interface Ninject是否会处理一个不';它没有IDisposable';s接口,但在其上执行';什么是实施?,interface,ninject,idisposable,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

假设我有一个对象接口,该接口实现了
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);
}
如果我使用这个接口来解析DbContext,Ninject还能处理它吗


IE:Ninject是否检查正在解析的对象以检测IDisposable,即使它在接口上丢失?

因此,您可以通过以下方式自行验证:

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();
公共接口IFoo{}
公共类Foo:IDisposable
{
公共空间处置()
{
控制台。WriteLine(“被处置”);
}
}
var kernel=新的标准内核();
kernel.Bind().To().InSingletonScope();
Get();
Dispose();
如果你能看到“被处置”。。好。。它被处理掉了。。如果不是。。没有!
当然,您可以用静态布尔标志等替换
控制台.WriteLine

是的。但你真的应该亲自尝试一下。或者查看ninject的源代码。
IMyContext
不应实现
IDisposable
。你这样做违反了法律。有关更多信息,请阅读。
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();