Tag: ninject

如何正确设置IIS 7应用程序池标识?

将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:默认情况下,当应用程序池标识为ApplicationPoolIdentity (如IIS应用程序池标识中所推荐的那样), Ninject似乎被忽略,因为我在创建时遇到以下错误第一个控制器: System.InvalidOperationException:尝试创建类型为“..MainController”的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 —> System.DirectoryServices.DirectoryServicesCOMException:发生操作错误。 我试图将IIS AppPool\ FullAccess授予包含该站点(包括所有子文件夹和文件)的文件夹,但这并没有改变任何内容。 但是,当我将应用程序池标识设置为任何域帐户(即使是简单的帐户,没有管理权限,以及没有对该站点的文件夹的任何访问权限)时,它仍然可以正常工作。 根据通过NuGet包设置MVC3应用程序教程安装Ninject。 我不确定,如果相关,该网站应该在具有Windows身份validation的域Intranet中工作。 因此,唯一的问题似乎是应用程序池标识。 至于我渴望使用推荐的方式,我希望拥有ApplicationPoolIdentity ,而不是域帐户。 这有什么用呢? 是否可以将所有这些混合在一起? 这是一个具有类似问题的SO线程: ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数 。 但是根本没有合适的答案。 作为删除的评论建议,我尝试使用NetworkSerive作为身份。 它运作正常。 但是,我想这并不比非特权域帐户好多少。 编辑 突然发现另一个依赖:应用程序池标识用于sql server上的windows身份validation,但我希望在那里使用客户端用户的凭据。 根据评论 同意通过模拟可以使用经过身份validation的凭据访问远程SQL Server。 但是,仍然不清楚ApplicationPoolIdentity和Ninject的问题是什么。 在这个问题的最顶部提到的文章让我想到这可能是由于虚拟帐户没有用户配置文件这一事实造成的。 这个方面对我来说仍然不清楚,因为仍然可以使IIS使用LoadUserProfile属性加载用户配置文件。 如果虚拟帐户没有配置文件,我无法获取,IIS将加载什么? 有人说: IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据。 SQL Express是执行此操作的应用程序的示例。 但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中。 NETWORKSERVICE帐户的用户配置文件由系统创建,始终可用。 但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件。 只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件。 如果管理员创建新的应用程序池,则不会创建用户配置文件。 但是,如果需要,可以通过将“LoadUserProfile”属性设置为“true”来配置IIS应用程序池以加载用户配置文件。 我在serverfault.com上找到了以下主题: […]

IoC(Ninject)和工厂

如果我有以下代码: public class RobotNavigationService : IRobotNavigationService { public RobotNavigationService(IRobotFactory robotFactory) { //… } } public class RobotFactory : IRobotFactory { public IRobot Create(string nameOfRobot) { if (name == “Maximilian”) { return new KillerRobot(); } else { return new StandardRobot(); } } } 我的问题是在这里做反转控制的正确方法是什么? 我不想将KillerRobot和StandardRobot混凝土添加到Factory类吗? 而且我不想通过IoC.Get 带来它们吗? 那个服务地点不是真的IoC对吗? 有没有更好的方法来解决在运行时切换混凝土的问题?

NinjectDependencyResolver无法绑定ModelValidatorProvider

我正在使用C#,.NET Framework 4.5.1开发ASP.NET Web Api 2.2。 更新我的Web.Api到Ninject 3.2.0后,我收到此错误: Error activating ModelValidatorProvider using binding from ModelValidatorProvider to NinjectDefaultModelValidatorProvider A cyclical dependency was detected between the constructors of two services. Activation path: 3) Injection of dependency ModelValidatorProvider into parameter defaultModelValidatorProviders of constructor of type DefaultModelValidatorProviders 2) Injection of dependency DefaultModelValidatorProviders into parameter defaultModelValidatorProviders of constructor of type […]

如何在Ninject中绑定Generic类型的接口

我是Ninject的新手,在我实现通用存储库模式时发现自己陷入困境。 我想将依赖项IRepository 绑定到类ConcreteRepository ,其中ConcreteRepository 实现IRepository ,EntityType实现IEntityType。 我试过这个: kernel.Bind<IRepository>().To<ConcreteRepository>(); …但是Ninject不会接受它,因为它不知道或不关心EntityType实现IEntityType。 我怎样才能绑定这种依赖? UPDATE 这是我得到的错误: 错误3类型’ICM.Dependency.Repository.ConcreteRepository’不能在generics类型或方法’Ninject.Syntax.IBindingToSyntax.To()’中用作类型参数’TImplementation’。 没有从“ConcreteRepository ”到“IRepository ”的隐式引用转换。 解 我仍然不太明白为什么我的绑定不起作用,但显然我在那里使用generics不正确。 因此,该解决方案与NInject无关。 我结束了指定ConcreteRepository以显式连接IEntityType和TEntityType: public class ConcreteRepository : IRepository where TEntity : TInterface { … } 然后注射可以写成如下: kernel.Bind<IRepository>().To<ConcreteRepository>()

NHibernate和奇怪的“Session is Closed!”错误

注意:现在我输入了这个,我不得不为超长问题道歉,但是,我认为这里提供的所有代码和信息在某种程度上都是相关的。 好吧,我在ASP.NET webforms应用程序的随机点上得到奇怪的“Session Is Closed”错误。 然而,今天,它终于在同一个地方一次又一次地发生。 我几乎可以确定在我的代码中没有任何处理或关闭会话,因为使用的代码位远远超出了所有其他代码,如下所示。 我也使用ninject作为我的IOC,这可能/可能不重要。 好的,首先是我的SessionFactoryProvider和SessionProvider类: SessionFactoryProvider public class SessionFactoryProvider : IDisposable { ISessionFactory sessionFactory; public ISessionFactory GetSessionFactory() { if (sessionFactory == null) sessionFactory = Fluently.Configure() .Database( MsSqlConfiguration.MsSql2005.ConnectionString(p => p.FromConnectionStringWithKey(“QoiSqlConnection”))) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .BuildSessionFactory(); return sessionFactory; } public void Dispose() { if (sessionFactory != null) sessionFactory.Dispose(); } } SessionProvider public class SessionProvider […]

在像体系结构这样的插件中使用Ninject

我正在学习DI,最近做了我的第一个项目。 在这个项目中,我实现了存储库模式。 我有接口和具体实现。 我想知道是否有可能将我的接口的实现构建为“插件”,我的程序将动态加载的dll。 所以程序可以随着时间的推移而不需要重建它,你只需将dll放在“plugins”文件夹中,更改设置并vo! 这可能吗? Ninject可以帮助解决这个问题吗?

Ninject和MVC3:dependency injection到动作filter

我发现了大量关于如何使用Ninject在ASP.NET MVC3中对ActionFilter进行属性注入的不确定文章和问题。 有人能给我一个明确的例子吗? 这是我的自定义身份validation属性。 public class CustomAuthorizeAttribute : AuthorizeAttribute { [Inject] public IService Service { get; set; } [Inject] public IAuthenticationHelper AuthenticationHelper { get; set; } public override void OnAuthorization(AuthorizationContext filterContext) { //My custom code } } 我正在使用WebActivator来设置Ninject [assembly: WebActivator.PreApplicationStartMethod(typeof(MyProject.Web.AppStart_NinjectMvc3), “Start”)] namespace MyProject.Web { public static class AppStart_NinjectMvc3 { public static void RegisterServices(IKernel kernel) { […]

如何使用async-await模式初始化对象

我正在尝试在我的服务类中遵循RAII模式,这意味着当构造一个对象时,它会被完全初始化。 但是,我遇到了异步API的困难。 有问题的类的结构如下所示 class ServiceProvider : IServiceProvider // Is only used through this interface { public int ImportantValue { get; set; } public event EventHandler ImportantValueUpdated; public ServiceProvider(IDependency1 dep1, IDependency2 dep2) { // IDependency1 provide an input value to calculate ImportantValue // IDependency2 provide an async algorithm to calculate ImportantValue } } 我的目标是摆脱ImportantValue getter中的副作用,使其成为线程安全的。 现在, […]

如何在Windows窗体应用程序中使用Ninject?

我有一个WinForms应用程序与此主窗体: ICountRepository countRepository; public MainForm(ICountRepository countRepository) { this.countRepository = countRepository; } public void IncrementCount() { countRepository.IncrementCount(); } 但我正在努力将ICountRepository注入mainform。 我怎么做 ?

如何注入UserManager和SignInManager

我试图弄清楚如何注入UserManager和SignInManager。 我在我的应用程序中安装了Ninject,并且我以下列方式使用它: 请将此视为一个全新的项目。 在Startup.cs里面我有以下内容: public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); app.UseNinjectMiddleware(CreateKernel); } private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Load(Assembly.GetExecutingAssembly()); return kernel; } } 现在,如果我要创建一些Dummy类并尝试基于其工作的接口注入它。 我测试过了。 我想弄清楚的是我现在将如何从Startup.Auth.cs中删除以下内容并将其注入。 没有我可以依赖的接口,我不知道如何做到这一点: app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); app.CreatePerOwinContext(ApplicationSignInManager.Create); 为了澄清一次,我的问题是:如何实例化ApplicationUserManager和ApplicationSignInManager并将其注入我的控制器参数中。 这是我试图将其注入的控制器: public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) { UserManager = userManager; SignInManager = signInManager; } 编辑: […]