有人可以用 一个基本的.NET例子解释dependency injection ,并提供一些到.NET资源的链接来扩展这个主题吗? 这不是什么dependency injection的重复? 因为我在问具体的.NET示例和资源。
假设我们有一堂课: public class MyClass { @Autowired private AnotherBean anotherBean; } 然后我们创build了这个类的一个对象(或者其他一些框架已经创build了这个类的实例)。 MyClass obj = new MyClass(); 是否有可能仍然注入依赖关系? 就像是: applicationContext.injectDependencies(obj); (我认为谷歌Guice有这样的东西)
如何使用匕首? 如何configurationDagger在我的Android项目中工作? 我想在我的Android项目中使用Dagger,但我觉得很困惑。 编辑:Dagger2自2015年5月15日也出来,它更令人困惑! [这个问题是一个“存根(stub)”,当我学习了更多关于Dagger1的内容并且学习了更多关于Dagger2的信息的时候,我将其添加到了我的答案中。 这个问题更多的是一个指导,而不是一个“问题”。]
Spring有两种types的DI:setter DI和construction DI。 基于构造器的DI修复了需要注入依赖关系的顺序。 基于设置器的DI不提供这个。 基于Setter的DI只有在需要时才帮助我们注入依赖关系,而不是在build造时要求它。 我没有看到任何其他的显着差异,因为这两种types的Spring DI提供了相同的function – 当代码启动时,setter和构造函数DI注入依赖关系。 当然,构造函数DI将通过构造函数完成,而构造函数DI将在构造该对象之后通过setter来完成,但对于开发人员在性能等方面没有任何区别。两者都提供了指定顺序的方法dependency injection也是如此。 我正在寻找一个场景,其中一个提供明显的优势,或者一个types完全无法使用。
我的Web应用程序在业务逻辑和表示逻辑上有一些细微的变化,具体取决于login用户的types。通过根据用户types注入不同的具体类来获得变化似乎非常适合DI。 所以我想知道我应该使用什么样的StructureMap来实现这个function(或者如果我是基于DI的目的而离开的话)。 (我刚刚了解到configuration文件不是实现这一目标的方法,因为设置configuration文件不是每个线程操作: StructureMapconfiguration文件是否线程安全? ) 编辑 这是这样的吗? public class HomeController { private ISomeDependancy _someDependancy; public HomeController(ISomeDependancy someDependancy) { _someDependancy = someDependancy; } public string GetNameFromDependancy() { return _someDependancy.GetName(); } } public interface ISomeDependancy { string GetName(); } public class VersionASomeDependancy : ISomeDependancy { public string GetName() { return "My Name is Version A"; } } […]
我想注入一个依赖到一个ServletContextListener 。 但是,我的方法是行不通的。 我可以看到Spring正在调用我的setter方法,但稍后调用contextInitialized时,该属性为null 。 这是我的设置: ServletContextListener: public class MyListener implements ServletContextListener{ private String prop; /* (non-Javadoc) * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) */ @Override public void contextInitialized(ServletContextEvent event) { System.out.println("Initialising listener…"); System.out.println(prop); } @Override public void contextDestroyed(ServletContextEvent event) { } public void setProp(String val) { System.out.println("set prop to " + prop); prop = val; } } web.xml […]
我做了一个三层应用程序,参考这个答案中描述的refrences: DAL with Repositories -> BLL with services and IRepository <- Asp.net mvc-app 为了使dependency injection运行,我看到几个选项: 1.从Web应用程序添加对DAL的引用,以便能够在应用程序启动时设置绑定。 2.使用xml-configuration的容器 (3.使用reflection来加载dal-assembly并查找types) 选项1很容易,也使DAL.dll被复制到垃圾箱,但后来我突然重新介绍了我努力摆脱的参考。 现在可以直接访问存储库。 选项2和3似乎不必要的复杂。 有没有别的办法?
根据马丁·福勒(Martin Fowler)的论文 ,控制反转是程序控制stream程颠倒的原理:外部源(框架,服务,其他组件)不是控制程序stream程的程序员,而是控制它。 就像我们把东西插入其他东西一样。 他提到了一个关于EJB 2.0的例子: 例如Session Bean接口定义了ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复)。 当这些方法被调用时,你无法控制,只是他们做了什么。 容器打电话给我们,我们不叫它。 这导致了框架和库之间的区别: 控制反转是使框架与图书馆不同的一个关键部分。 图书馆本质上是一组你可以调用的函数,这些函数通常组织成类。 每个调用都会做一些工作,并将控制权返回给客户端。 我认为,DI是IOC的观点意味着一个对象的依赖是相反的:相反,它控制着它自己的依赖关系,生命周期……其他的东西是为你做的。 但是,当你用手告诉我DI时,DI不一定是IOC。 我们仍然可以有DI,也没有IOC。 然而,在本文中(来自pocoapsule,另一个IOC Framework for C / C ++),它表明由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件,因此不会使它成为普通的Java / C ++对象(POJO / POCO)。 除dependency injection模式之外的控制容器的反转 : http : //www.pocomatic.com/docs/whitepapers/ioc-vs-di/ 补充阅读,了解旧的基于组件的开发框架的问题,这导致了上面的第二篇文章: 为什么和控制反转 : http : //www.pocomatic.com/docs/whitepapers/ioc/ 我的问题 :IOC和DI究竟是什么? 我很困惑。 基于pococapsule,国际奥委会是一个更重要的东西比只是颠倒对象的控制或程序员和框架。
我正在试图注入一个自定义的AuthorizeAttribute的依赖如下: public class UserCanAccessArea : AuthorizeAttribute { readonly IPermissionService permissionService; public UserCanAccessArea() : this(DependencyResolver.Current.GetService<IPermissionService>()) { } public UserCanAccessArea(IPermissionService permissionService) { this.permissionService = permissionService; } protected override bool AuthorizeCore(HttpContextBase httpContext) { string AreaID = httpContext.Request.RequestContext.RouteData.Values["AreaID"] as string; bool isAuthorized = false; if (base.AuthorizeCore(httpContext)) isAuthorized = permissionService.UserCanAccessArea(AreaID, httpContext.User); return isAuthorized; } } 这工作,但似乎是解决作为一个单身的含义,我得到的问题在我的前面描述的问题 我想要做的是使用属性注入,但作为我的属性本身不解决的统一我找不到一种方法来configuration容器来拦截和解决属性。 我已经尝试了以下内容: public class […]
我尝试了Spring 3.x下面的代码,它与BeanNotFoundException失败,它应该根据问题的答案之前,我问 – 我可以使用Spring注入相同的类? @Service public class UserService implements Service{ @Autowired private Service self; } 由于我正在尝试这与Java 6,我发现以下代码工作正常: @Service(value = "someService") public class UserService implements Service{ @Resource(name = "someService") private Service self; } 但我不明白它是如何解决循环依赖。 编辑: 这是错误信息。 OP在对其中一个答案的评论中提到: 由于:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合依赖关系的[com.spring.service.Service]types的匹配bean:期望至less1个符合此依赖关系的autowire候选者。 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}