Tag: inversion of control

Unity registerType中generics参数的多态分辨率

我正在尝试执行以下操作并失败: class base {} class derived1 : base {} class derived2 : base {} interface itr where t : class, base {} class c1: itr {} class c2 : itr {} //以下2个注册失败: _unityContainer.RegisterType<itr, c1>(“c1”); _unityContainer.RegisterType<itr, c2>(“c2”); 我得到的错误是上述注册中的第二个参数不能被类型转换为第一个参数,并且该注册无效。 有关如何做到这一点的任何建议? 我需要执行上述操作,而不是使用derived1或derived2类作为通用参数进行注册,因为在解析时我不想知道我正在解析的确切派生类型。 我只想多态地使用基类型方法。

在类库中实例化Castle Windsor容器时的最佳做法是什么?

我想知道实例化温莎城堡容器的最佳位置在一个类库中。 我应该只在我正在使用的类的构造函数中执行它,还是有一个我不知道的程序集入口点? 谢谢。

使用Unity解析命名依赖项

我有一个具有2个依赖项的服务:存储库和网关(短信)。 我需要解析2个不同版本的服务,这些版本仅在传递给网关的其中一个参数上有所不同。 代码简化如下 public interface IService { string DoSomething(); } public interface IServiceFoo { string DoSomething(); } public interface IServiceBar { string DoSomething(); } public interface IRepository { } public class Repository : IRepository { } public interface IGateway { string Name { get; set; } } public class Gateway : IGateway { public string […]

MVC 6 IUrlHelperdependency injection

我想通过dependency injection使用IUrlHelper,以便能够使用其function为不同的rest端点生成uris。 我似乎无法弄清楚如何从头开始创建UrlHelper,因为它在MVC 6中发生了变化,而MVC并没有自动在IoC控制器中提供该服务。 设置是我的控制器接受api模型转换器类的内部模型,并使用IUrlHelper(通过Depenedency Injection)。 如果有一个更好的替代IUrlHelper / UrlHelper,我可以用来为我的WebApi动作/控制器生成Uris,我愿意接受建议。

使用Autofac作为服务定位器

我正在使用Autofac来处理我的应用程序中的dependency injection。 但是,我有一个组件在运行时执行一些reflection魔法,我不知道它在编译时需要什么依赖项。 通常,我只是让这个组件直接引用Container并解决它想要的任何东西。 但是,实例化此类的类没有对Container的引用。 实际上,我的组件依赖于Autofac。 我更喜欢松散耦合,但这似乎不是一个选择。 有没有办法要求(在构造函数args中,或使用属性注入,或者其他什么!)Autofac给我一个对我的构造函数中的容器的引用? 或者,是否有更简洁的方法让Autofac为我提供可以解决任何问题的魔术服务定位器对象?

StructureMap CacheBy InstanceScope.HttpSession不起作用

这是我的StructureMap引导: ObjectFactory.Initialize(factory => { //Business Conversation is per session factory.ForRequestedType(). TheDefaultIsConcreteType(). CacheBy(InstanceScope.HttpSession); //Session Factory is life time factory.ForRequestedType(). TheDefaultIsConcreteType(). CacheBy(InstanceScope.Singleton); }); var conversation = ObjectFactory.GetInstance(); 当我将对话设置为使用.CacheBy(InstanceScope.HttpSession)时,我找不到对象引用,但是如果我不使用CacheBy它可以正常工作。 这需要进入会话,我不确定为什么这不起作用。 我做错了什么或者这似乎是StructureMap中的错误?

如何连接我的Web API Castle Windsor DI代码的各个部分?

如何连接我的Web API Castle Windsor DI代码的各个部分,以便Controller的路由选择正确的接口实现? 注意 :经过几次错误的开始/死角和部分胜利( 这里 , 这里和这里 ),我将尽快确定最多500分。 但是我只会给出一个非常好的答案 – IOW,一个足够清楚,我可以理解它并“插入”到我的项目中,这样我就可以将给定的具体类挂钩到特定的Controller。 这没什么:我有一个Web API(“MVC”)项目。 但实际上,这个服务器项目没有“V”(View),所以也许更好的首字母缩略词是MRC(Model / Repository / Controller)。 无论如何,我正在尝试使用Castle Windsor添加DI。 我试图通过构造函数接口args交换具体类的概念。 但是,如何实现此function, 我一直在摔跤是一头野兽,而且我现在非常伤痕累累,血腥的头发和泥泞的鼻孔引发。 我认为,无论如何,我需要的大部分代码 – 首先。 考虑到DI,我现在有一个“DIPlumbing”文件夹和一个“DIInstallers”文件夹。 “DIPlumbing”文件夹包含两个类:WindsorCompositionRoot.cs和WindsorControllerFactory.cs。 “DIInstallers”文件夹目前有三个文件,即ISomethingProvider.cs,SomethingProvider.cs和SomethingProviderInstaller.cs SomethingProviderInstaller似乎是将DIInstallers中的接口/类连接到DIPlumbing文件夹中的东西的关键。 (我还修改了Global.asax.cs以替换Castle Windsor替换的默认控制器路由业务)。 但我很困惑我应该在DIInstallers文件夹中放置哪些类。 这些应该取代我的存储库(它同样有一个接口和一个为每个模型实现该接口的具体类)? IOW,我应该将我的Repository代码基本上移到DIInstallers文件夹中 – 然后摆脱IRepository和Repository单元吗? 当然,这将导致在Controller类中进行必要的更改,这些更改现在引用了Repository类。 或者存储库和DIInstallers类是否共存? 如果是这样,控制器,安装程序和存储库之间的连接/关联是什么? 似乎我读到的DI和Castle Windsor越多,我就越困惑。 我不知道我是否过于密集,或者我是否想要使它变得更难,或者使用/呈现它的冲突风格是问题。 底线是:我被困在流沙中,需要Johnny Quest伸出一根坚固的竹竿。 最好的答案可能是,也许可能要求太多,将直观地表示所有这些组件 – 控制器,模型,存储库,安装程序,Global.asax.cs,组合根,工厂,提供商等。 ,彼此相关。 出于“完全公开”的目的,我将添加我希望是下面代码的关键元素,以显示我已经获得的内容以及它(希望如何)相互连接。 组成根: public […]

Unity.WebApi | 确保控制器具有无参数的公共构造函数

我在ASP.NET WebApi解决方案中使用Unity.WebApi NuGet包(Unity 4.0.1和Unity.WebApi 5.2.3)。 我面临的问题是,在尝试运行代码时,我收到错误: Make sure that the controller has a parameterless public constructor 。 我在这里搜索过类似的post,但我找不到任何符合我问题的post。 请不要只说“添加无参数构造函数”,因为它显示您显然不知道IoC是什么以及为什么该语句完全没有意义并且违背了IoC的目的。 我之所以这么说,是因为我在迄今为止看过的很多其他主题中看到了这一点。 这是我的Startup.cs(我正在使用Owin,所以我没有Global.asax): public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); // Registering unity stuff UnityConfig.RegisterComponents(); app.UseWebApi(config); } 这是我的UnityConfig.cs: public static class UnityConfig { public static void RegisterComponents() { var container = new UnityContainer(); […]

如何在XML配置中声明Unity InjectionFactory

我正在将Unity配置移动到web.config文件。 我坚持如何将以下代码配置迁移到xml格式: var container = new UnityContainer(); container.RegisterType(new InjectionFactory(x=> HttpContext.Current.User)); return container; 以下是XML声明:

Ninject:按类型_and_注册名称/标识符解析对象

我正在寻找一种方法来使用Ninject做这样的事情: // Sample from the Unity application block IMyService result = myContainer.Resolve(“Data”); (来自http://msdn.microsoft.com/en-us/library/cc440957.aspx ) 可能吗?