我有一个IRoleRepository类型,它接受一个构造函数参数“database”,它接受一种IDbRepository,它本身带有一个构造函数参数“ConnectionStringName”。我有一个依赖解析器,它有一个GetService方法,而下面的代码工作,我希望有更好的方法在绑定时间和使用Ninject 3.0获取时间。注意我可能有多个IDBRepository实例,每个实例都有自己的“ConnectionStringName”。
_repository = EngineContext.Current.GetService<IRoleRepository>(
new ConstructorArgument("database",
EngineContext.Current.GetService<IDbRepository>(
new ConstructorArgument(SystemConstants.ConnectionStringName, SystemConstants.ConfigurationDatabase))));
答案 0 :(得分:2)
您可以使用WithConstructorArgument
指定构造函数参数以及绑定。
kernel.Bind<IDbRepository>().To<DbRepository>()
.WithConstructorArgument(
SystemConstants.ConnectionStringName,
SystemConstants.ConfigurationDatabase);
或使用ToConstructor()
kernel.Bind<IDbRepository>().ToConstructor(
x => new DbRepository(
SystemConstants.ConfigurationDatabase,
x.Inject<ISomeOtherDependency>())
答案 1 :(得分:0)
好的,我相信我找到了我想要的东西:
在绑定时使用此功能:
Bind<IDbRepository>().To<SqlServerRepository>()
.WhenInjectedInto<IRoleRepository>()
.WithConstructorArgument(SystemConstants.ConnectionStringName, SystemConstants.ConfigurationDatabase);
这允许我在Get time:
中使用它_repository = EngineContext.Current.GetService<IRoleRepository>();
这当然意味着我现在可以根据注入IDbRepository的更具体的存储库来改变IDbRepository的构造函数参数。例如:
Bind<IDbRepository>().To<SqlServerRepository>()
.WhenInjectedInto<ITimerJobStore>()
.WithConstructorArgument(SystemConstants.ConnectionStringName, SystemConstants.ConfigurationDatabase);
Bind<ITimerJobStore>().To<TimerJobSqlStore>();