使用Ninject 2.2绑定通用存储库和特定存储库

时间:2011-08-29 21:36:03

标签: repository ninject ninject-2

我有一个我在Repository中实现的IRepository,我为特定类型扩展了Repository,因为UsersRepository我需要使用Ninject的泛型绑定绑定所有类型,但是当请求IRepository的实例时,我需要获取UsersRepository而不是Repository。 / p>

Bind<IDbContext>().To<SMSDataContext>()
.WithConstructorArgument("connectionStringName", "dbcsname");

这里我绑定了通用存储库:

Bind(typeof(IRepository<>)).To(typeof(Repository<>))
.WithConstructorArgument("dbContext",new SMSDataContext("dbcsname"));        

这里我试图绑定一个特定的实例:

Bind<IRepository<Setting>>().ToConstant(settingsRepository);

用“。ToConstant”尝试了不同的方法,只有“.To”也尝试绑定到具体的实现,如下所示:

 UsersRepository usersRepository = new UsersRepository(new SMSDataContext("SMSDB"));
 Bind<IRepository<Setting>>().To<SettingsRepository>().WithConstructorArgument("dbContext", new SMSDataContext("dbscname")); ;  

请告知。

1 个答案:

答案 0 :(得分:3)

目前只能使用一些作弊,因为开放式通用绑定与封闭式通用绑定具有相同的优先级。但是您可以通过添加条件来增加绑定的优先级。

Bind<IRepository<Setting>>().ToConstant(settingsRepository).When(ctx => true);