簡體   English   中英

Ninject with MVC-如何從控制器方法中的ninject手動獲取對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM