2013-11-03 26 views
1

構造一般I類有在Ninject以下層次結構:Ninject:從非通用

public interface IReader {} 
public interface IReaderAsync {} 

public class Reader: IReader{} 
public class ReaderAsync : IReaderAsync{} 

public interface IDatabaseReader : IReader, IReaderAsync {} 

public class DatabaseReader : IDatabaseReader 
{ 
    public DatabaseReader(IReader reader, IReaderAsync readerAsync){...} 
} 

這些類的約束,構造和加載作爲使用這些綁定預期在Ninject:

Bind(typeof(IReader)).To(typeof(Reader)); 
Bind(typeof(IReaderAsync)).To(typeof(ReaderAsync)); 
Bind(typeof(IDatabaseReader)).To(typeof(DatabaseReader)); 

此外,我有一個單獨的類,它是由IDatabaseReader構建的(soley):

public class DatabaseReader<T> : IDatabaseReader<T> 
{ 
    public DatabaseReader(IDatabaseReader databaseReader){...} 
} 

我使用的綁定是:

// open binding 
Bind(typeof(IDatabaseReader<>)).To(typeof(DatabaseReader<>)); 
... 
Kernel.TryGet<IDatabaseReader<TestEntry>>(); 

但內核返回null .. 我在做什麼錯誤?

+0

'公共接口IDatabaseReader:IDatabaseReader',這是不對的。請徹底重讀您的問題。那裏有很多錯誤,這使我們很難解釋你的問題。 – Steven

+0

對不起,現在解決了。 – TheFastCat

+0

我從來沒有和Ninject合作過,所以我不知道你在做什麼。但是會綁定一個封閉的類型的工作?像:'綁定(typeof(IDatabaseReader ))。(typeof(DatabaseReader ))'? – nawfal

回答

0

在重建了一個單獨的,更簡單的問題impl並向自己證明它會加載之後,我意識到我沒有加載我認爲是在運行時的Ninject綁定。所以問題解決了:用戶問題。