jwd*_*y13 7 dependency-injection .net-core asp.net-core
我有一个接受三个构造函数参数的类.在我的作文根我想定义/只覆盖一个三个构造函数的参数; 其他两个依赖项已经映射到我的DI容器中,应该从IServiceProvider创建.
有了Ninject,我可以这样做:
Bind<IMyInterface>().To<MyClass>()
.WithConstructorArgument("constructorArgumentName", x => "constructor argument value");
Run Code Online (Sandbox Code Playgroud)
当Ninject创建MyClass时,它使用此字符串参数并自动为我注入其他两个依赖项.我在.net核心遇到的问题是我无法告诉IServiceCollection我只想指定三个参数中的一个,我必须定义所有这些或者没有.例如,在.net核心中,这就是我要做的事情:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", new Dependency2(), new Dependency3());
Run Code Online (Sandbox Code Playgroud)
我不喜欢创建Dependency2和Dependency3类的新实例; 这两个类可以有自己的构造函数参数.我只是希望DI管理这些依赖项.所以我的问题是 - 当使用IServiceCollection类在.net核心中映射依赖项时,如何覆盖单个构造函数参数?
如果你不能只覆盖一个contructor参数,那么如何使用IServiceCollection解决依赖?我尝试过这样的事情:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", serviceCollection.Resolve<IDependency2>(), serviceCollection.Resolve(IDependency3>());
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我无法弄清楚如何使用IServiceCollection解决依赖关系.
试试这个:
services.AddTransient<IDependency2, Dependency2Impl>();
services.AddTransient<IDependency3, Dependency3Impl>();
services.AddTransient<IMyInterface>(provider=>
return new MyClass("constructor argument value",
provider.GetService<IDependency2>(),
provider.GetService<IDependency3>());
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2349 次 |
最近记录: |