Tag: ninject

如何使用Ninject InRequestScope处理异步调用?

我们在ASP.NET Web Api应用程序中使用Ninject ,并将DbContext与InRequestScope绑定。 这适用于我们的大多数请求,因为它们同步完成所有工作,因此在请求完成后可以安全地处理上下文。 但是,我们根据请求进行异步Web服务调用,它具有作为回调传递的continuation方法,并且该回调方法需要使用数据库上下文。 但是我们的请求不应该等待异步服务调用完成,而是立即返回(这是一个明确的要求)。 这是一个简化的情况示例。 public class MyController : ApiController { private readonly MyDbContext dbContext; private readonly SomeWebService service; public MyController(MyDbContext dbContext, SomeWebService service) { this.dbContext = dbContext; this.service = service; } public IHttpActionResult MyActionWithAsyncCall() { // Doing stuff. // Calling webservice method, passing the Callback as the continuation. service.MethodWithCallback(param1, param2, this.Callback); […]

使用Ninject工厂方法将IEnumerable注入构造函数

我正在尝试使用Ninject将IEnumerable注入构造函数中。 我的构造函数看起来像这样: public MatrixViewModel(IEnumerable fooViewModels) { _fooViewModels = fooViewModels; } 我的Ninject模块如下所示: public class MainModule : NinjectModule { public override void Load() { Bind<IEnumerable>() .ToMethod(context => GetFooViewModels()) .InSingletonScope(); // this binding is not working } private IEnumerable GetFooViewModels() { // returns a bunch of foo view models } } 这似乎不起作用。 我没有得到任何错误。 Ninject只是不使用绑定,传递给构造函数的值基本上只是一个空的默认值。 你如何使用Ninject注入IEnumerable ? 编辑 关于我工厂方法的更多细节: […]

如何解决错误:该类型似乎没有实现microsoft.practices.servicelocation.iservicelocator?

我是MVC的新手,我正在关注Adam Freeman的 “ PRO ASP.NET MVC 4 ”。 我目前正在编写第6章。 我正在学习如何在MVC 4中使用Ninject进行dependency injection。 我按照书中的描述创建了应用程序。 现在我无法得到以下错误的原因: 该类型似乎没有实现microsoft.practices.servicelocation.iservicelocator 这是我的控制器代码: public class HomeController : Controller { private Product[] products = { new Product {Name = “Kayak”, Category = “Watersports”, Price = 275M}, new Product {Name = “Lifejacket”, Category = “Watersports”, Price = 48.95M}, new Product {Name = “Soccer ball”, […]

Json.NET如何在反序列化期间执行dependency injection?

当我有一个没有默认构造函数的类,即使用dependency injection来传递其依赖项时, Newtonsoft.Json可以创建这样的对象吗? 例如: public class SomeFoo { private readonly IFooDependency _dependency; public SomeFoo(IFooDependency dependency){ if(dependency == null) throw new ArgumentNullException(“dependency”); _dependency = dependency; } public string Data { get; set; } public int MoreData { get; set; } public void DoFoo(){ Data = _dependency.GetFooData(); MoreData = _dependency.GetMoreFooDate(); } } 在序列化过程中,我只关心存储Data和MoreData(以及对象的类型,但暂时不要复杂化)。 现在,为了反序列化,我可以调用类似的东西 var obj = […]

Ninject:是否可以在SingletonScope中使用父对象,在TransientScope中使用子对象?

几个星期以来,我一直在用这种方式绞尽脑汁……我现在拥有的是这样的: 一堆*Service类 所有这些都依赖于通过EF访问数据库的不同*Repository类 为了允许unit testing,将DbContext注入到存储库中。 (所以我不能用于处理上下文) 要正确处理注入的EF上下文,我可以在InRequestScope()或简单的自定义作用域中运行我的依赖树 – InScope(c => new object())和所有其他级别的InParentScope() 。 这两种方法都会在每个请求期间创建和处理大量对象。 另外我们讨论的是单页应用程序,因此95%的查询(大约50个)将在2个请求中执行,因此InRequestScope()似乎不是一个好主意。 此外, *Service类不保持状态,因此可以是InSingletonScope()并且可以最小化对象创建量。 问题 是否有可能在InSingletonScope()拥有parent *Service和*Repository类,并以某种方式将EF DbContext注入到每次访问时将返回一个新实例的范围,并使用NInject来表示IDisposable ? 我知道在创建对象时会注入依赖项,但这仍然可以通过某种方式进行管理吗?

如何在使用Unity IoC时实现Ninject .InSingletonScope()

我在我的应用程序中使用了ninject IoC,特别是以下内容: kernel.Bind().To() .InSingletonScope(); 我想使用Unity IoC来实现这一点,但有人可以告诉我如何使它成为同样的,它的含义是什么意思“InSingletonScope()”? 以下工作,但我担心它没有正确完成,因为可能需要指定Singleton。 container.RegisterType();

HttpConfiguration.get_ServiceResolver()缺少

我正在使用MVC4连接Ninject并让它正在努力实际解决依赖关系。 但是,我得到以下exception: 找不到方法:’System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()’。 有没有人碰到这个并且有工作?

获取ninject工厂扩展以允许将工厂参数传递给依赖项

使用Ninject Factory扩展,您可以自动生成工厂,并让工厂将参数传递给类的构造函数。 以下测试通过: public interface IBar { int Foo { get; } } public class Bar : IBar { int _foo; public Bar(int foo) { _foo = foo; } public int Foo { get { return _foo; } } } public interface IBarFactory { IBar CreateTest(int foo); } [Test] public void ExecuteTest() { var kernel […]

拦截Ninject。 无法加载IProxyRequestFactory

我正在学习使用Ninject和Interceptor模式。 我有以下拦截器。 public class MyInterceptor:IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine(“Pre Execute: ” + invocation.Request.Method.Name); foreach (var param in invocation.Request.Arguments) { Console.WriteLine(“param : ” + param); } invocation.Proceed(); Console.WriteLine(“Post Execute: ” + invocation.Request.Method.Name); Console.WriteLine(“Returned: ” + invocation.ReturnValue); } } 并且有一个名为MyClass的类,它只有2个简单的方法,虚拟以允许拦截器处理它们。 (两种方法是Echo和double,这就像他们的名字所说的那样。) 我通过NuGet将Ninject,Ninject.Extensions.Interception和Ninject.Extensions.Interception.DynamicProxy添加到我的项目中。 添加了以下using语句。 using Ninject; using Ninject.Extensions.Interception.Infrastructure.Language; using Ninject.Extensions.Interception; 我的Main方法,它执行引导看起来像这样。 static void Main(string[] args) […]

为什么在Ninject.Portable中没有IKernel实现

我使用和喜欢Ninject很多。 我想知道为什么”BasicKernel”中没有”BasicKernel” ? 实现IKernel是否需要PCL不包含的任何调用? 我在谈论简单的场景(关于: Bind().To()和Get() )?