Tag: ninject

为WCF设置Ninject

有没有人有关于如何在WCF中设置Ninject的明确指示? 谷歌搜索,但我看不到有关如何在WCF中使用Ninject的任何更新指南。

Ninject在appharbor上的应用程序启动时崩溃

我在appharbor上部署的MVC 3项目中使用了Ninject。 我注意到我在启动应用程序时遇到exception,看起来像Ninject内部的东西是原因,但我找不到任何答案 – 所以请帮助我:) 将尝试在此处添加完整的例外: Server Error in ‘/’ Application. Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: […]

带有Ninject的多个参数的构造方法

我想使用Ninject作为IoC容器,但无法理解如何在构造函数中创建一个具有多个参数的类的实例。 基本上我有一个用于PCL库中的身份validation的服务接口,以及它在WP8项目中的实现,该项目在构造函数中接收cosumer密钥,secret和baseAddress: //On PCL project public interface IAuthorizationService { bool Authenticate(); } //On WP8 Project pubilc class MyAuthenticator : IAuthorizationService { public MyAuthenticator(string consumerKey, string consumerSecret, string baseAddress) { … } public bool Authenticate() { … } } 现在我需要配置Ninject模块,以便我可以获得IAuthorizationService的实例。 如果我的class级没有构造函数,我会这样做: internal class Module : NinjectModule { public override void Load() { this.Bind().To(); } } 如果它有构造函数的固定值,我会这样做: […]

当我转向dependency injection时,使用语句会发生什么

我目前正在使用以下代码: public class MyProvider { public MyProvider() { } public void Fetch() { using (PopClient popClient = new PopClient()) { …. } } } 因为我希望能够对Fetch方法进行unit testing,并且由于我无法模拟PopClient,所以我创建了一个接口和一个调用PopClient的包装类。 我的更新代码如下: public class MyProvider { private readonly IPopClient popClient; public MyProvider(IPopClient popClient) { this.popClient = popClient; } public void Fetch() { using (var pop3 = popClient) { …. } […]

如何将AutoMapper与Ninject.Web.Mvc一起使用?

建立 我有一个AutoMapperConfiguration静态类,用于设置AutoMapper映射: static class AutoMapperConfiguration() { internal static void SetupMappings() { Mapper.CreateMap.ConvertUsing<IdToEntityConverter>(); } } 其中IdToEntityConverter是一个自定义的ITypeConverter ,如下所示: class IdToEntityConverter : ITypeConverter where T : Entity { private readonly IRepository _repo; public IdToEntityConverter(IRepository repo) { _repo = repo; } public T Convert(ResolutionContext context) { return _repo.GetSingle(context.SourceValue); } } IdToEntityConverter在其构造函数中获取IRepository ,以便通过命中数据库将ID转换回实际实体。 请注意它没有默认构造函数。 在我的ASP.NET的Global.asax ,这就是我对OnApplicationStarted()和CreateKernel() : protected override void […]

Ninject和ASP.NET Web API

在我提出问题之前,你应该知道我从这个页面得到了我当前的代码: http : //www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api -资源/ 我正在尝试使用上面站点上的IDependencyResolver适配器在我的应用程序中使用ASP.NET Web API和Ninject。 我创建了所有代码,就像它在网站上显示的那样有效,但是当我加载我的应用程序时,我的常规控制器失败并显示此错误: [MissingMethodException: No parameterless constructor defined for this object.] [InvalidOperationException: An error occurred when trying to create a controller of type ‘AccountManager.Controllers.HomeController’… 因此,似乎我可以将Ninject与常规控制器或Web API控制器一起使用,但不能同时使用两者。 🙁 这是我的代码: NinjectResolver.cs public class NinjectResolver : NinjectScope, IDependencyResolver { private IKernel _kernel; public NinjectResolver(IKernel kernel) : base(kernel) { _kernel = kernel; } […]

如何设置Ninject单身人士

我有一个类( MyFacade ),我用Ninject注入参数: class MyFacade { IDemoInterface demo; public MyFacade(IDemoInterface demo) { this.demo = demo; } public void MyMethod() { Console.WriteLine(demo.GetInfo()); } } 当然,我必须设置Ninject以注入我的参数的适当实现( IDemoInterface ) 我知道,我可以通过kernel.Get();来实例化MyFacade对象kernel.Get(); 没有设置别的东西。 目前我的门面没有接口(因为它是我唯一的实现,也许我会为标准建议添加其接口) 如果我想制作这个外观singlenton,我知道两种方法:创建一个空构造函数并通过执行此kernel.Get();传递参数kernel.Get(); 或者通过设置Ninject,如: kernel.Bind().To().InSingletonScope(); 第二个看起来更好的方法,但你知道以单一方式设置它的任何其他方法吗?

dependency injection和开发生产力

抽象 在过去的几个月里,我一直在编写一个轻量级,基于C#的游戏引擎,它具有API抽象和实体/组件/脚本系统。 它的整体想法是通过提供类似于Unity引擎的架构来简化XNA,SlimDX等游戏开发过程。 设计挑战 正如大多数游戏开发者所知,在整个代码中需要访问许多不同的服务 。 许多开发人员使用全局静态实例,例如渲染管理器(或composer php),场景,图形设备(DX),记录器,输入状态,视口,窗口等。 全局静态实例/单例有一些替代方法。 一种是通过构造函数或构造函数/属性dependency injection(DI)为每个类提供它需要访问的类的实例,另一种是使用全局服务定位器,如StructureMap的ObjectFactory,其中服务定位器通常配置为一个IoC容器。 dependency injection 出于多种原因,我选择了DI方式。 最明显的一个是可测试性,通过对接口进行编程并具有通过构造函数提供给它们的每个类的所有依赖关系,这些类很容易测试,因为测试容器可以实例化所需的服务或它们的模拟,并输入到每个class级都要进行测试。 不管你信不信,做DI / IoC的另一个原因是提高代码的可读性。 没有更多的初始化过程实例化所有不同的服务,并通过引用所需服务手动实例化类。 配置内核(NInject)/注册表(StructureMap)可以方便地为引擎/游戏提供单点配置,其中选择和配置服务实现。 我的问题 我常常觉得我正在为接口创建接口 我的工作效率急剧下降,因为我所做的只是担心如何以DI方式做事,而不是快速简单的全局静态方式。 在某些情况下,例如在运行时实例化新实体时,需要访问IoC容器/内核来创建实例。 这会产生对IoC容器本身的依赖(SM中的ObjectFactory,Ninject中的内核实例) ,这实际上与首先使用它的原因背道而驰 。 怎么解决这个问题? 我想到了抽象工厂,但这进一步使代码复杂化。 根据服务要求,某些类的构造函数可能变得非常大,这将使该类在其他上下文中完全无用,如果不使用IoC。 基本上做DI / IoC会大大降低我的工作效率,在某些情况下会进一步使代码和架构复杂化。 因此,我不确定这是一条我应该遵循的道路,还是只是放弃并以老式的方式做事。 我不是在寻找一个单一的答案,说明我应该或不应该做什么,而是讨论从长远来看使用DI是否值得,而不是使用全局静态/单一方式,可能的优点和缺点我忽略了处理DI时,上面列出的问题的可能解决方案。

ASP.NET MVC4中的Ninject

所以经过多次搞砸后,我终于将Ninject连接起来并在我的MVC4应用程序中进行编译。 我遇到的问题是IDependencyScope接口不再存在,我所知道的并且System.Web.Http.Dependencies命名空间已经废除。 所以,我现在的问题是我已将所有内容连接起来并运行我得到的应用程序: Sequence contains no elements [InvalidOperationException: Sequence contains no elements] System.Linq.Enumerable.Single(IEnumerable`1 source) +379 Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectMvcHttpApplicationPlugin.cs:53 Ninject.Web.Common.Bootstrapper.b__0(INinjectHttpApplicationPlugin c) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52 Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1 series, Action`1 action) in c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:31 Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:53 Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:81 我无法追踪甚至开始了解它的来源。 我在Global.asax.cs中的标准Ninject方法如下所示: protected override IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Load(Assembly.GetExecutingAssembly()); kernel.Bind().To(); GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new NinjectDependencyResolver(kernel)); return kernel; } protected […]

将棱镜与Ninject一起使用

是否有人在那里使用Prism框架与Ninject而不是Unity? 我需要一些Unity尚未支持的function,我决定将IoC容器切换到Ninject。 虽然我在替换中有点挣扎。 我需要从Prism使用的是EventAggregator和RegionManager。 我已经看到了这个实际上替换的示例 ,但是这是为较旧版本的Prism编写的,并且几个类似乎已经改变等等。所以我在尝试重写它之后做了一些努力后最终都感到困惑。 所以 – 我的问题基本上是: 如何用Ninject替换Unity? 有什么必要的步骤? 最初我假设我可以编写一个简单的引导程序来创建和配置Ninject容器并使用它来解析所有其他对象。 我将IEventAggregator绑定到EventAggregator并将IRegionManager绑定到RegionManager,但是在创建Shell并且调用RegionManager.CreateRegion时它会失败。 问题是,似乎我需要在某处设置ServiceLocator,因为它在此行上失败: IServiceLocator locator = ServiceLocator.Current; 一路上有什么想法和提示吗?