首页 新闻 会员 周边 捐助

Castle Windsor如何自动装配?

0
[已解决问题] 解决于 2010-11-25 14:12

因为我很多Controller类都是单一依赖IXXXService接口,而IXXXRepository<T>也是。怎么做才能省下这些做法?

protected IXXXService _Service=(IXXXService)MvcApplication.container["XXXService"];

 

直接保留Service在Controller类的这样形态,而达到注入效果

protected IXXXService _Service;

 

能实现么?

问题补充: 原来只要设置了属性注入或者标出注入类型的构造函数,Windsor即可实现自动装配,而针对ASP.NET MVC的特殊机制,Controller注入要修改一下一个地方,具体做法看评论。
bugfly的主页 bugfly | 初学一级 | 园豆:10
提问于:2010-11-24 12:09
< >
分享
最佳答案
0

你是想 只要声明protected IXXService _Service; Castle就可以自动赋值到 _Service吗?不可以的。

沉默的糕点 | 小虾三级 |园豆:1786 | 2010-11-24 13:14
我是这个意思。兄弟真的是不可能?
bugfly | 园豆:10 (初学一级) | 2010-11-24 13:34
创建Controller的时候注入吧,要修改mvc的代码。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-24 14:05
如果它不自动配置,那我就高估了它作用了,你真的确定不存在这可能? 根据你的说法,我只能用Windsor工厂模式去解耦了,现在实现大致如下。 private IRepository<Group> _Repositroy = (IRepository<Group>)WindsorHelper.resolveObject(typeof(IRepository<Group>)); 失望中,以为可以自动装配对象关系。
bugfly | 园豆:10 (初学一级) | 2010-11-25 10:14
哥们,你错了,是会自动装配的。已经真实,现在的问题是,controller的注入关系不能自动化,奇怪。其他都可以。
bugfly | 园豆:10 (初学一级) | 2010-11-25 11:01
这么厉害,学习学习。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-25 11:13
controller注入也OK了,原来默认的ControllerFactory不检测注入,所以IOC容器没法,重写DefaultControllerFactory就可以了。具体代码 public class MyControllerFactory : DefaultControllerFactory { public MyControllerFactory() { var controllerTypes = from type in Assembly.GetExecutingAssembly().GetTypes() where typeof(IController).IsAssignableFrom(type) select type; foreach (Type type in controllerTypes) { WindsorHelper.registerController(type); } } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return (IController)WindsorHelper.resolveObject(controllerType); } }
bugfly | 园豆:10 (初学一级) | 2010-11-25 14:08
谢谢。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-25 14:52
其他回答(1)
0

运用多继承接口的办法实现:)

雅皮士 | 园豆:205 (菜鸟二级) | 2011-05-22 05:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册