我对 Ninject 很陌生。我想找到一种方法将控制器的 Modelstate 进一步传递到服务层。
我现在拥有的:
private readonly IAccountService service;
public AccountController(ILanguageService ls, ISessionHelper sh)
{
this.service = new AccountService(new ModelStateWrapper(this.ModelState));
this.languageService = ls;
this.sessionHelper = sh;
}
public AccountService(IValidationDictionary validationDictionary)
{
this.validationDictionary = validationDictionary;
}
我想要以某种方式到达:
private readonly IAccountService service;
public AccountController(ILanguageService ls, ISessionHelper sh, IAccountService as)
{
this.service = as;
this.languageService = ls;
this.sessionHelper = sh;
}
public AccountService(IValidationDictionary validationDictionary)
{
this.validationDictionary = validationDictionary;
}
但正如您所看到的,AccountService 将永远无法接收 IValidationDictionary,因为它从未作为参数从 AccountController 发送。
有可能实现吗?或者这只是我必须忍受的事情之一?
ModelState 是应用程序的一部分runtime状态。因此,当您使用 Ninject 编写应用程序时,它不可用。
您可以通过创建一个来解决此限制抽象工厂来创造你的AccountService
并使其成为应用程序运行时状态的一部分。
public interface IAccountServiceFactory
{
IAccountService Create(IValidationDictionary validationDictionary);
}
public class AccountServiceFactory
{
public IAccountService Create(IValidationDictionary validationDictionary)
{
return new AccountService(validationDictionary);
}
}
然后在您的 AccountController 中,注入 AccountServiceFactory 而不是 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
}
或者,您可以通过每个需要的公共方法调用将运行时依赖项直接传递到帐户服务。
this.service.DoSomething(new ModelStateWrapper(this.ModelState));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)