【问题标题】:Binding Generic Repository and Specific Repository with Ninject 2.2使用 Ninject 2.2 绑定通用存储库和特定存储库
【发布时间】:2011-11-06 08:49:35
【问题描述】:

我有一个在 Repository 中实现的 IRepository,并且我将特定类型的 Repository 扩展为 UsersRepository 我需要使用 Ninject 的通用绑定绑定所有类型,但是在请求 IRepository 的实例时,我需要获取 UsersRepository 而不是 Repository。

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")); ;  

请指教。

【问题讨论】:

  • 感谢您的编辑:)。

标签: repository ninject ninject-2


【解决方案1】:

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

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

【讨论】:

  • 感谢它确实有效,但似乎我必须定义我期待 SettingRepository 的实例如下:var rep = Container.Resolve&lt;IRepository&lt;Setting&gt;&gt;() as SettingsRepository; 再次感谢。
  • ToConstructor 只是一个示例,因为它是您的代码中的第一次出现。您也可以使用 To()
  • 是的,现在设法让这个工作更干净了:) 再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 2016-02-20
  • 2019-11-21
  • 2019-01-17
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多