How to inject ModelState as parameter with Ninject?

雨燕双飞 提交于 2019-12-02 01:58:03

ModelState is part of the application's runtime state. Therefore, it is not available at the point in time when you compose the application with Ninject.

You could work around this limitation by creating an Abstract Factory to create your AccountService and also make it a part of your application's runtime state.

public interface IAccountServiceFactory
{
    IAccountService Create(IValidationDictionary validationDictionary);
}

public class AccountServiceFactory
{
    public IAccountService Create(IValidationDictionary validationDictionary)
    {
        return new AccountService(validationDictionary);
    }
}

And then in your AccountController, inject an AccountServiceFactory instead of an AccountService.

   private readonly IAccountServiceFactory serviceFactory; 

   public AccountController(ILanguageService ls, ISessionHelper sh, IAccountServiceFactory asf)
    {
        this.serviceFactory = asf;
        this.languageService = ls;
        this.sessionHelper = sh;

    }

    public void DoSomething()
    {
        var accountService = this.serviceFactory.Create(new ModelStateWrapper(this.ModelState));

        // Do something with account service
    }

Alternatively, you could pass the runtime dependency directly to the account service through each public method call where it is required.

this.service.DoSomething(new ModelStateWrapper(this.ModelState));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!