我有一個需要三個構造函數參數的類。在我的作文根中,我想定義/覆蓋僅三個構造函數參數中的一個的;其他兩個依賴關係已經映射到我的DI容器中,並且應該從IServiceProvider創建。IServiceCollection覆蓋單個構造函數參數
隨着Ninject我可以做這樣的事情:
Bind<IMyInterface>().To<MyClass>()
.WithConstructorArgument("constructorArgumentName", x => "constructor argument value");
當Ninject創建MyClass的它使用此字符串參數,並自動注入其他兩個依賴我。我在.net core中遇到的問題是,我無法告訴IServiceCollection,我只想指定三個參數中的一個,我必須定義所有這些參數或者沒有。例如,在.NET的核心,這是我必須做的:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", new Dependency2(), new Dependency3());
我不喜歡創建Dependency2和Dependency3類的新實例;這兩個類可以有自己的構造函數參數。我只想讓DI管理這些依賴關係。所以我的問題是 - 如何在使用IServiceCollection類在.net核心中映射依賴關係時重寫單個構造函數參數?
如果你不能重寫只有一個構造參數,那麼你如何解決與IServiceCollection的依賴關係?我試圖做這樣的事情:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", serviceCollection.Resolve<IDependency2>(), serviceCollection.Resolve(IDependency3>());
但這並沒有工作,我無法弄清楚如何解決使用IServiceCollection依賴。
你有一個「供應商」類存在,但我不明白那是什麼或者它是從哪裏來的?我的上面的代碼位於具有此簽名的方法中的Startup.cs類中:public void ConfigureServices(IServiceCollection services)。 「提供者」類在哪裏創建? – jwdenny13
'provider'是'Func'參數,它的類型是'IServiceProvider'。在你的問題中,你將它定義爲'x'。 –
哦,我明白了。我完全忽略了:)。謝謝你,偉大的作品! – jwdenny13