Tag: dependency injection

解释为什么构造函数注入比其他选项更好

在Pro Spring 3 Book中,第4章 – 介绍IOC和DI在Spring中 – 第59页,在“Setter Injection vs. Constructor Injection”一节中, 包含Spring,提供了一种机制来确保在使用Setter Injection时定义所有的依赖关系,但是通过使用Constructor Injection,可以以容器不可知的方式声明对依赖关系的要求“ 你能用例子来解释吗?

如何使用dependency injection的属性?

在我创build的MVC项目中,我有以下RequirePermissionAttribute ,它被放在需要特定权限的任何操作上(这个例子已经简化了): public class RequirePermissionAttribute : ActionFilterAttribute, IAuthorizationFilter { public Operation Permissions { get; set; } public RequirePermissionAttribute() { } public RequirePermissionAttribute(Operation permissions) { this.Permissions = permissions; } public bool AuthorizeCore(HttpContextBase httpContext) { IAuthorizationService authServ = new ASPNETAuthorizationService(); return authServ.Authorize(httpContext); } public void OnAuthorization(AuthorizationContext filterContext) { Enforce.ArgNotNull(filterContext); if (this.AuthorizeCore(filterContext.HttpContext)) { // code snipped. } else […]

InvalidOperationException:无法parsing“Microsoft.AspNetCore.Http.IHttpContextAccessor”types的服务

我开始将我的asp.net核心RC1项目转换为RC2,并面临现在IHttpContextAccessor没有解决的问题。 为了简单起见,我使用Visual Studio模板ASP.NET Core Web Application (.Net Framework)创build了新的ASP.NET RC2项目。 比我为HomeController添加了为我创build的模板的构造函数。 public HomeController(IHttpContextAccessor accessor) { } 而我开始申请后,我收到下一个错误: InvalidOperationException:尝试激活“TestNewCore.Controllers.HomeController”时无法parsing“Microsoft.AspNetCore.Http.IHttpContextAccessor”types的服务。 Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired) 在我真正的应用程序中,我需要在我自己的服务类中parsingIHttpContextAccessor以访问_contextAccessor.HttpContext.Authentication和_contextAccessor.HttpContext.User 。 Everething在RC1中工作正常。 那么它怎么可能在RC2?

使用StructureMap时传递构造函数参数

我正在为我的DI使用StructureMap。 想象一下,我有一个类需要1个参数,如: public class ProductProvider : IProductProvider { public ProductProvider(string connectionString) { …. } } 当我得到一个IProductProvider的实例时,我需要在运行时指定“connectionString”。 我已经configuration了StructureMap,如下所示: ForRequestedType<IProductProvider>.TheDefault.Is.OfConcreteType<ProductProvider>(). WithCtorArgument("connectionString"); 不过,我不想在这里调用EqualTo(“something …”)方法,因为我需要一些工具来在运行时dynamic指定这个值。 我的问题是:如何通过使用ObjectFactory获得IProductProvider的实例? 目前,我有这样的东西: ObjectFactory.GetInstance<IProductProvider>(); 但是,如你所知,这是行不通的… 任何build议将不胜感激。

从@ComponentScan中排除@Component

我有一个组件,我想从一个特定的@Configuration @ComponentScan中排除: @Component("foo") class Foo { … } 否则,它似乎与我的项目中的其他类冲突。 我不完全理解碰撞,但是如果我注释掉@Component注解,事情就像我想要的那样工作。 但是依赖这个库的其他项目希望这个类由Spring来pipe理,所以我只想在我的项目中跳过它。 我试过使用@ComponentScan.Filter : @Configuration @EnableSpringConfigured @ComponentScan(basePackages = {"com.example"}, excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)}) public class MySpringConfiguration {} 但它似乎没有工作。 如果我尝试使用FilterType.ASSIGNABLE_TYPE ,我得到一个奇怪的错误,无法加载一些看似随机的类: 引起:java.io.FileNotFoundException:类path资源[junit / framework / TestCase.class]无法打开,因为它不存在 我也尝试使用type=FilterType.CUSTOM ,如下所示: class ExcludeFooFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { return metadataReader.getClass() == Foo.class; } […]

我应该使用哪种dependency injection工具?

我正在考虑在我们的用户界面中使用Microsoft Unity作为我的dependency injection工具。 我们的中间层已经使用温莎城堡,但我想我应该坚持微软。 有没有人有什么最好的dependency injection工具是什么想法? Autofac 城堡MicroKernel /温莎 PicoContainer.NET Puzzle.NFactory Spring.NET StructureMap Ninject 统一 简单的喷油器 NauckIT.MicroKernel WINTER4NET ObjectBuilder的

用javax.injectreplacecom.google.inject

javax.inject注释是否可以直接替代com.google.inject? 所以,如果我用javax.inject中所有当前的guice / gin注释replace掉了我的应用程序,那么我的应用程序就可以编译并运行了。 首先,javax.inject覆盖了google.inject覆盖的所有基础吗?

MEF和IoC容器的区别(如Unity,Autofac,SMap,Ninject,Windsor.Spring.net等)

我一直在寻找dependency injection并阅读一些文章。 但是我仍然无法找出MEF与其他IoC之间的区别。 所以,我的问题是这样的:我应该在哪种情况下使用MEF或IoC容器? 为什么在(WPF&Silverlight)或桌面应用程序中使用MEF for PRISM? 而在Web应用程序中,人们使用IoC容器。 那么,决定使用哪种依赖技术的标准是什么呢? 我已经通过文章http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx ,但我无法确定任何东西。

Ninject:使用Ninject注册一个已经创build的实例?

任何人都可以告诉我,如果我可以注册一个已经创build的Ninject类的实例,以便它将使用这个实例,每次它需要注入? 我想你可以称之为单身,但我已经创build了实例。 所有文档都指向创build一个类的新实例。

如何使用具有“贪婪”构造函数的Scan来使用具有通用未closurestypes的StructureMap

在各种堆栈溢出问题和博客post之间,关于开放式generics和StructureMap的主题有相当多的文档。 不幸的是,我必须错过一些东西,因为我试图使用scan来执行configuration,而具有“贪婪”构造函数的类实现还没有工作。 我希望StructureMap通过引用其实现的接口来获取下一个类的实例。 ToCsvService存在于名为“基础结构”的未引用程序ToCsvService 。 IToCsvService存在于名为Core的引用程序IToCsvService 。 正如你可以看到ToCsvService有一个“贪婪的”构造函数。 public class ToCsvService<TSource> : IToCsvService<TSource> { public ToCsvService(ICollection<TSource> collection) { } } 我让StructureMap通过ConnectImplementationsToTypesClosing方法了解ToCsvService 。 ObjectFactory.Initialize(cfg => { cfg.Scan(scan => { scan.Assembly("Infrastructure"); scan.WithDefaultConventions(); // even with this call StructureMap cannot use ToCsvService // instance of IToCsvService (though wouldn't expect it to) scan.ConnectImplementationsToTypesClosing (typeof(IToCsvService<>)); }); }); 从ObjectFactory.WhatDoIHave()方法看来,StructureMap知道ToCsvService 。 PluginType名称说明 […]