第一次使用Unity做依赖注入,碰到点问题,请教下大家!直接上代码。Unity版本使用的是3.5
Web.Config文件中Unity的定义:
<unity> <containers> <container name="defaultContailer"> <register type="BCL.Core.Cache.ICacheStrategy,BCL.Core" mapTo="BCL.Core.Cache.DefaultCacheStrategy,BCL.Core" /> </container> </containers> </unity>
HomeController中指明了_cache的属性注入,然后又定义了个有参的构造函数,就是这个地方报错了。
public class HomeController : BaseController { [Dependency] public ICacheStrategy _cache { get; set; } public HomeController(string a) { var xx = a; } public ActionResult Index(string lang) { _cache.Insert("111","1",CacheLevel.Eight); ViewBag.Title = "Home Page"; ViewBag.Lang = lang; return View(); } }
报错信息如下图,这应该是构造器注入引发的问题吧,但是为什么会这样呢?怎么做才能解决这问题呢?能只使用属性注入不用构造器注入吗?
public HomeController():HomeController(string.Empty)
{ }
public HomeController():HomeController(string.Empty){}
这是什么写法?
@webaspx: public HomeController(){}
@Launcher: 不会是不让用带参的构造函数吧?
@webaspx: http://q.cnblogs.com/q/16668/
@Launcher: 看了下那个问题,明白了Unity会选择参数最多的构造函数进行注入。
查了下如果需要指定构造函数注入的话需要指定特性 [InjectionConstructor],在无参的构造函数上加上就行了。
http://unity3d.9tech.cn/news/2014/0208/39766.html
谢谢!
嗯,你要定义一个无参的构造函数才行,为空也行
@吴瑞祥: 不行啊,定义了无参的也是报一样的错误。
@吴瑞祥: 不会是不让用带参的构造函数吧?
@webaspx: 清理重新生成一下,应该是可以的.看你这个异常就是构造函数的问题,还是说异常不一样了?
@吴瑞祥: 重新生成了,还是报一样的错误。删除掉带参的构造函数就行,存在就不行。
@吴瑞祥: 解决问题了,在无参的构造函数上加上特性 [InjectionConstructor] 就行了,强制使用无参的构造函数注入。