Tag: dependency injection

WebAPI 2.1中的Ninject错误 – 确保控制器具有无参数的公共构造函数

我在WebAPI项目中安装了以下软件包及其依赖项: Ninject.Web.WebApi Ninject.Web.WebApi.OwinHost 我这纯粹是作为web-api项目运行的。 没有MVC。 当我运行我的应用程序并向AccountController的Register操作发送POST时,我收到以下错误: { “message”:”An error has occurred.”, “exceptionMessage”:”An error occurred when trying to create a controller of type ‘AccountController’. Make sure that the controller has a parameterless public constructor.”, “exceptionType”:”System.InvalidOperationException”, “stackTrace”:” at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()”, “innerException”:{ “message”:”An error […]

使用Castle Windsor指定组件注册实例

我有一个关于Castle Windsor的简单问题,我很久没有使用过了。 我正在尝试使用特定实例注册服务,该实例将是服务的单例实现。 容器无法尝试创建服务本身的实现,因为它具有容器无法解析的依赖项。 我有一个服务实例,我希望它是唯一一个用于请求服务的人的实例。 但我似乎很少运气。 我暂时通过使用这段代码获得了希望: container.Register(Component.For().Instance(serviceObj)); 但是所有Castle都使用实例在其上执行.GetType()并注册该类型。 对服务的请求将随后导致容器尝试创建该类型,并在无法填充依赖项时失败。 那么有什么方法可以做我想做的事情吗? 如果不是,我将创建某种IServiceProvider来获取服务的实例,并且没有容器的依赖关系来填写。 但这比正确的解决方案更像是一种解决方案。 有什么建议? 谢谢!

Ninject绑定,接口接口

我想按照以下方式做点什么: kernel.Bind().To().InSingletonScope(); kernel.Bind().To().InSingletonScope(); kernel.Bind().To(); kernel.Bind().To(); 所以我可以这样做: public class Boot { public Boot(IBootTask[] bootTasks) { foreach(var task in bootTasks){task.Execute();} } } 但我似乎无法将接口绑定到接口,任何人都知道解决这个问题的方法吗?

防止Simple Injector在解析未注册的服务时抛出exception

我想知道,只要GetInstance(Of TService)返回Nothing Simple Injector是否可以选择停止抛出exception? 它现在似乎是抛出它们,因为我有两个请求来获取一个实例,它不在那里,它抛出了exception。 有没有办法防止默认行为,设置某个地方,或其他什么?

Unity – 如何将多个映射用于相同类型并注入对象

我正在使用Unity 2.0,在下面的代码中我试图在Worker对象中注入一个特定的工具。 我想使用以下代码。 但是当然有一个错误“依赖的解决方案失败了”。 我相信我应该可以做这样的事情,但我很难搞清楚。 IUnityContainer container = new UnityContainer(); container.RegisterType(“Worker”) .RegisterType(“ToolA”) .RegisterType(“ToolB”) .RegisterType(“ToolC”); IWorker worker = container.Resolve(“ToolA”); 我知道这不起作用,但我该如何解决这个问题呢? BarDev

dependency injection初始化

请注意:我刚开始使用AutoFac来了解DI和IoC。 dependency injection应该在控制器构造函数中初始化吗? 这怎么样? private IMyService iMyService; public HomeController(IMyServices myService) { iMyService = myService; } 不同于… public IMyService iMyService = new MyService(); 最后,似乎依赖性仍然存在。 编辑:修正了拼写错误,新的MyService(); 是新的IMyService();

在MVC中使用DI时的大规模控制器构造函数参数列表

我正在使用ASP.NET MVC3解决方案,该解决方案使用dependency injection与autofac。 我们的控制器是由autofac正确创建的,所有必需的对象都被正确传入。这些对象通常包括将域对象转换为MVC(视图)模型的服务,存储库和映射器。 所以控制器构造函数看起来有点像: public abcController( ILogger logger, IabcRepository abcRepository, IabcService abcService, IMapper abcMapper, … ) 不幸的是,随着时间的推移,这些构造函数参数列表往往会很快增长。 我们的一些控制器现在需要60个或更多参数。 我们在这里创造了一些反模式吗? 编辑 我应该提到我们试图遵循薄的控制器模式。 此外,大多数参数往往是映射器 – 大约66%。 控制方法通常非常简单,并遵循以下模式: 基于参数调用适当的服务或存储库 使用mapper将结果转换为适当的视图模型 传递视图模型进行查看 或者这种模式: 从后期行动中接收模型 使用mapper将其转换为适当的域对象 使用域对象调用适当的服务或存储库

在Unity中使用抽象工厂作为注入?

我在一些控制器实例中注册了一个抽象工厂注入。 我可以注册那个抽象工厂并将其用作注塑工厂吗? 这就是我所拥有的: public interface ILevelFactory { Levels Create(); } .RegisterType() .RegisterType(new InjectionFactory((c) => StaticLevelFactory.GetLevels())) 期望的情况: .RegisterType() .RegisterType(*** look up and use ILevelFactory ***) 简而言之,我想摆脱StaticLevelFactory。

每个匹配生命周期范围的实例,默认情况下?

我想在Autofac中为每个匹配的生命周期范围注册创建一个实例,但偶尔需要从全局容器(没有匹配的生命周期范围)请求实例。 在没有匹配的生命周期范围的情况下,我想提供一个顶级实例而不是抛出exception。 这可能吗?

使用深度嵌套的依赖项进行unit testing和dependency injection

假设遗留类和方法结构如下所示 public class Foo { public void Frob(int a, int b) { if (a == 1) { if (b == 1) { // does something } else { if (b == 2) { Bar bar = new Bar(); bar.Blah(a, b); } } } else { // does something } } } public class Bar { […]