我有一个在 Repository 中实现的 IRepository,我将特定类型的 Repository 扩展为 UsersRepository 我需要使用 Ninject 的通用绑定(bind)来绑定(bind)所有类型,但是在为 IRepository 请求实例时,我需要获取 UsersRepository 而不是 Repository。
Bind<IDbContext>().To<SMSDataContext>()
.WithConstructorArgument("connectionStringName", "dbcsname");
这里我绑定(bind)了通用存储库:
Bind(typeof(IRepository<>)).To(typeof(Repository<>))
.WithConstructorArgument("dbContext",new SMSDataContext("dbcsname"));
这里我尝试绑定(bind)一个特定的实例:
Bind<IRepository<Setting>>().ToConstant(settingsRepository);
尝试使用“.ToConstant”和仅使用“.To”的不同方法也尝试绑定(bind)到具体实现,如下所示:
UsersRepository usersRepository = new UsersRepository(new SMSDataContext("SMSDB"));
Bind<IRepository<Setting>>().To<SettingsRepository>().WithConstructorArgument("dbContext", new SMSDataContext("dbscname")); ;
请指教。
最佳答案
目前只能使用一些作弊,因为开放通用绑定(bind)与封闭通用绑定(bind)具有相同的优先级。但是您可以通过添加条件来提高绑定(bind)的优先级。
Bind<IRepository<Setting>>().ToConstant(settingsRepository).When(ctx => true);
关于repository - 使用 Ninject 2.2 绑定(bind)通用存储库和特定存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236268/