首页 新闻 会员 周边 捐助

Unity Dependency 属性注入 无效

0
悬赏园豆:40 [已解决问题] 解决于 2011-06-01 23:14

贴代码:


public class People
{
public People()
{

}
private Info info;

[Dependency]
public Info Info
{
set { info = value; }
get { return info; }
}

}

public class Info
{
public string Name { get; set; }
}

Main函数中使用:

container.RegisterType(typeof(People));

container.RegisterType(
typeof(Info));

People ppl
= new People();
Console.WriteLine(ppl.Info.Name);
//报错,Info为null,注入失败

如果加上这一句:

ppl.Info = container.Resolve<Info>();

就是正确的,但是我需要的是使用[Dependency]属性自动注入的方式实例化对象。

我查了很多例子,好像也没有做特别的配置啊。请高手帮忙看看,谢谢。

沧海月明.的主页 沧海月明. | 初学一级 | 园豆:169
提问于:2011-06-01 14:42
< >
分享
最佳答案
0

container.RegisterType(typeof(People));

container.RegisterType(
typeof(Info));

People ppl
= new People();

//加上这个

container.BuildUp(ppl)

收获园豆:40
Kain | 菜鸟二级 |园豆:445 | 2011-06-01 20:15
一定要调用 BuildUp() 方法吗?我看网上很多例子都是直接添加[dependency] 之后即可,是不是存在其他方式呢?
沧海月明. | 园豆:169 (初学一级) | 2011-06-01 23:07
我明白了:
People ppl = new People(); //关键是这里,new 出对象时,容器并没有对对象做任何处理,因此对象的属性都为null

People ppl = container.Resolve();//如果使用容器注入对象,那么对象中的属性才可以被动态注入

问题解决,谢谢你的提示!
沧海月明. | 园豆:169 (初学一级) | 2011-06-01 23:13

@沧海月明.: 你的问题的关键代码是:

System.Web.Mvc.DependencyResolver.SetResolver(new UnityDependencyResolver(Container));//MVC特有的

这样不需要显示赋值,不需要new也不需要Resolve。

UnityDependencyResolver的实现是相对固定的,可以网上搜一下

二师弟tl | 园豆:204 (菜鸟二级) | 2016-05-03 14:29
其他回答(3)
0

我的加上了 Dependency,出现了以下错误,求解决......

错误 1 特性“Dependency”在该声明类型中无效。它只在“assembly”声明中有效。

Tlink | 园豆:116 (初学一级) | 2013-06-30 15:33

问题解决没,我也遇到了

支持(0) 反对(0) 生活滋味 | 园豆:200 (初学一级) | 2016-01-26 12:02
0

设置属性为public 即可

ranj | 园豆:202 (菜鸟二级) | 2015-01-19 17:02
0

自带的特性和unity的属性有冲突。加下这个引用
using Unity.Attributes;
就可以了。

summerming | 园豆:202 (菜鸟二级) | 2018-11-06 08:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册