首页 新闻 赞助 找找看

使用Unity依赖注入引发的问题

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-08 15:28

第一次使用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();
        }
    }

报错信息如下图,这应该是构造器注入引发的问题吧,但是为什么会这样呢?怎么做才能解决这问题呢?能只使用属性注入不用构造器注入吗?

webaspx的主页 webaspx | 小虾三级 | 园豆:1973
提问于:2014-07-08 14:21
< >
分享
最佳答案
0

public HomeController():HomeController(string.Empty)
        {        }

收获园豆:25
Launcher | 高人七级 |园豆:45045 | 2014-07-08 14:28

public HomeController():HomeController(string.Empty){}

这是什么写法?

webaspx | 园豆:1973 (小虾三级) | 2014-07-08 14:46

@webaspx: public HomeController(){}

Launcher | 园豆:45045 (高人七级) | 2014-07-08 14:47

@Launcher: 不会是不让用带参的构造函数吧?

webaspx | 园豆:1973 (小虾三级) | 2014-07-08 14:55
Launcher | 园豆:45045 (高人七级) | 2014-07-08 15:14

@Launcher: 看了下那个问题,明白了Unity会选择参数最多的构造函数进行注入。

查了下如果需要指定构造函数注入的话需要指定特性 [InjectionConstructor],在无参的构造函数上加上就行了。

http://unity3d.9tech.cn/news/2014/0208/39766.html

谢谢!

webaspx | 园豆:1973 (小虾三级) | 2014-07-08 15:23
其他回答(1)
0

嗯,你要定义一个无参的构造函数才行,为空也行

收获园豆:25
吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-08 14:41

@吴瑞祥: 不行啊,定义了无参的也是报一样的错误。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2014-07-08 14:49

@吴瑞祥: 不会是不让用带参的构造函数吧?

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2014-07-08 14:57

@webaspx: 清理重新生成一下,应该是可以的.看你这个异常就是构造函数的问题,还是说异常不一样了?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-08 15:08

@吴瑞祥: 重新生成了,还是报一样的错误。删除掉带参的构造函数就行,存在就不行。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2014-07-08 15:12

@吴瑞祥: 解决问题了,在无参的构造函数上加上特性 [InjectionConstructor] 就行了,强制使用无参的构造函数注入。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2014-07-08 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册