我在我的Web应用程序上安装了MVC5 ninject NuGet模块,我正在向专业版的控制器中注入依赖项。设置和使用非常简单。我注入的一个抽象是IApplicationSettingsProvider:
public interface IApplicationSettingsProvider
{
string this[string key]
{
get;
}
}
这很棒,因为我的客户端有一个旧的,实施不佳的“应用程序设置数据库”,他们试图用它来管理他们的自定义软件套件中的应用程序设置。这是一团糟,所以我决定我不会依赖它。
现在,能够从任何控制器访问我的应用程序设置都很棒,但有时我需要从View访问设置。我决定创建一个静态实用程序类,其中包含一些注入的类实例(包括IApplicationSettingsProvider),但我无法弄清楚如何从NinjectWebCommon.cs访问ninject内核!无法访问我的绑定,我不知道如何实例化实用程序类。
public class DependencyUtility {
private DependencyUtility instance;
public IApplicationSettingsProvider ApplicationSettingsProvider { get; set; }
public IAuthenticationProvider AuthenticationProvider { get; set; }
...
private DependencyUtility() {
ApplicationSettingsProvider = ... ? ninject.Get<IApplicationSettingsProvider> ?
AuthenticationProvider = ... ? ninject.Get<IAuthenticationProvider > ?
...
}
public static DependencyUtility GetInstance() {
if(instance == null) {
instance = new DependencyUtility();
}
return instance;
}
}
我是以错误的方式来做这件事的吗?我认为View应该能够直接访问应用程序设置之类的东西,而不是将相关设置打包到模型和视图中(然后必须将其传递给部分)。访问应用程序设置的最佳方式是通过抽象的注入界面?
有没有人知道如何使用MVC5中的ninject内核进行手动注入?或者是否有更好的解决方案将应用程序设置提供给任何视图/部分?