我对使用依赖项注入(inject)还很陌生,我正在我的 WPF 应用程序中使用 Ninject 进行尝试。我想知道我应该如何跨类传递参数。
例如
public class ViewPersonViewModel : ViewModelBase
{
private IDataAccessService _dataService;
private IPerson _person;
private string _remarks;
// binded to textbox
public string Remarks
{
get { return _remarks; }
set {
if (_remarks != value) {
remarks = value;
OnPropertyChanged("Remarks");
}
}
}
public ViewPersonViewModel(
IDataAccessService dataService, IPerson person)
{
_dataService= dataService;
_person = person;
}
// binded to Button
public void RetrieveStatus()
{
Remarks = _dataService.RetrieveRemarks(_person);
}
}
在这里,dataService 是一个固定的类,我大概可以在其中做
class Module : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<IDataAccessService>().To<DefaultDataAccessService>();
}
}
但我想知道我应该如何处理 person 参数,它是由调用类设置的。
我从Creating an instance using Ninject with additional parameters in the constructor看到可以在构造函数中传递额外的参数。
但是,我有一些顾虑:
正在使用
kernel.Get<MyClass>( With.Parameters.ConstructorArgument( "parameterName", parameterValue) );
一个理想的方式?它不会在调试中引起很多问题,例如当您输入parameterName
时。错误?Ruben 还提到了在涉及 Provider 的情况下使用更复杂的方式。这里适用吗?如果是,我该如何使用它?
最佳答案
您可能会考虑像这样重载构造函数:
public ViewPersonViewModel(IPerson person)
this(DependencyResolver.GetInstance<IDataAccessService>(), person)
{
}
public ViewPersonViewModel(
IDataAccessService dataService, IPerson person)
{
_dataService= dataService;
_person = person;
}
这样做的主要缺点是您不能直接通过 IoC 请求 ViewPersonViewModel。
关于c# - 使用 Ninject 跨类传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025548/