关于MVC3与Unity集成的一个疑惑

wumylove1234 2012-06-29 12:08:48
正在尝试使用Unity注入View,可是遇到了一点疑惑,如下:
在Application_Start中有如下代码:

var container = new UnityContainer();
container.RegisterInstance<IMessageService>(new MessageService
{
Message = "You are welcome to our Web Camps Training Kit!",
});
container.RegisterType<IViewPageActivator, IndexViewPageActivator>(new InjectionConstructor(container)); //注册类型并提供了构造函数所需的参数
IDependencyResolver resolver = DependencyResolver.Current;
IDependencyResolver newResolver = new UnityDependencyResolver(container, resolver);
DependencyResolver.SetResolver(newResolver);

相应的IndexViewPageActivator类代码如下:

public class IndexViewPageActivator : IViewPageActivator
{
IUnityContainer _container;
public IndexViewPageActivator(IUnityContainer container)
{
_container = container;
}
public object Create(ControllerContext controllerContext, Type type)
{
var o = _container.Resolve(type);
return o;
}
}

相应的UnityDependencyResolver类代码如下:

public class UnityDependencyResolver : IDependencyResolver
{
IUnityContainer container;
IDependencyResolver resolver;
public UnityDependencyResolver(IUnityContainer container, IDependencyResolver resolver)
{
this.container = container;
this.resolver = resolver;
}
public object GetService(Type serviceType)
{
try
{
return this.container.Resolve(serviceType);
}
catch
{
return this.resolver.GetService(serviceType);
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this.container.ResolveAll(serviceType);
}
catch
{
return this.resolver.GetServices(serviceType);
}
}
}

我不明白的是,在UnityDependencyResolver和IndexViewPageActivator中,相应的调用_container.Resolve都能返回实例,特别是在UnityDependencyResolver中,基本上不走return this.resolver.GetService(serviceType);这行代码,而我并没有操作过_container,难道MVC在某个地方向_container中注册过什么?或者是UnityContainer自己通过上下文自己注册或者进行了解析吗?
...全文
250 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

来个回复的吧,把分给了就结了
[/Quote]

动不动说“注入”的人都非常容易让人“疑惑”。

少用“注入”概念,多用.net(或者说微软从vb1.0就开始使用的)事件驱动概念,疑惑就少多了。
wumylove1234 2012-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

来个回复的吧,把分给了就结了


动不动说“注入”的人都非常容易让人“疑惑”。

少用“注入”概念,多用.net(或者说微软从vb1.0就开始使用的)事件驱动概念,疑惑就少多了。
[/Quote]

我是不太理解Unity,也没有精力去研究它的源码。我只是疑惑为什么Unity会能解析出来未在它的Container上注册的类型和实例,我猜想它可能是它默认是读取了本地的所有类型信息。。。。猜想必竟是猜想,想到论坛上来求证一下。。。。
wumylove1234 2012-06-29
  • 打赏
  • 举报
回复
CSDN人气现在这么差吗?没人理的呀,顶一下~~
wumylove1234 2012-06-29
  • 打赏
  • 举报
回复

还真是这么差呀?真的没人理的,表示一下也行呀
wumylove1234 2012-06-29
  • 打赏
  • 举报
回复
CSDN人气现在这么差吗?没人理的呀,顶一下~~

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧