[英]Ninject with MVC - how can I manually get object from ninject inside controller method?
我的意思是-當我為控制器使用Ninject時,它會自動將所有字段注入控制器構造函數,現在...我的項目中有一個名為CommonMethods的類,我需要按順序將某些字段從控制器傳遞給該類。要使用它(此類僅包含非靜態方法,因此需要創建它),當然我可以這樣手工完成:
CommonMethods cm = new CommonMethods(someVarFromCurrentcontroller, someTherVar,... and so on..);
cm.SomeMethod();
但是,上述內容將迫使我每次修改“ CommonMethods”構造函數時都要手動更新代碼,所以問題是-有沒有辦法在這里使用Ninject? 我想做類似的事情:
IKernel k = new StandardKernel();
CommonMethods c = k.Get<CommonMethods>();
但是,如果我嘗試上述操作,則會出現一條錯誤消息:“沒有匹配的綁定可用於X”(但它們在那里)。 我猜這是因為我使用的是新內核,而不是應用程序啟動時使用的內核。 我該如何解決這個問題?
提前致謝。
最好的祝福。
編輯1:
這是我的控制器構造函數的樣子:
private EFDbContext context;
private ISaleActionRepository saleActionRepository;
private IUserRepository userRepository;
public TestController(ISaleActionRepository saleActionRepository, IUserRepository userRepository, EFDbContext context)
{
this.saleActionRepository = saleActionRepository;
this.userRepository = userRepository;
this.context = context;
}
這就是我的CommonMethods控制器的樣子:
private IUserRepository userRepository;
private IPaymentRepository paymentRepository;
private IFunctionalityPackageRepository functionalityPackageRepository;
private ISettingRepository settingRepository;
public CommonMethods(IUserRepository userRepository, IPaymentRepository paymentRepository, IFunctionalityPackageRepository functionalityPackageRepository, ISettingRepository settingRepository)
{
this.userRepository = userRepository;
this.paymentRepository = paymentRepository;
this.functionalityPackageRepository = functionalityPackageRepository;
this.settingRepository = settingRepository;
}
只需在TestController
的構造函數中將CommonMethods
服務添加為參數,然后讓容器構建完整的對象圖即可。 這樣的對象圖可以深很多層。
private readonly EFDbContext context;
private readonly ISaleActionRepository saleActionRepository;
private readonly IUserRepository userRepository;
private readonly CommonMethods commonMethods;
public TestController(ISaleActionRepository saleActionRepository,
IUserRepository userRepository, EFDbContext context, CommonMethods commonMethods)
{
this.saleActionRepository = saleActionRepository;
this.userRepository = userRepository;
this.context = context;
this.commonMethods = commonMethods;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.