c# – ASP.NET MVC2和MEF – 为什么我的MefControllerFactory不能获得导出或MetaData?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ASP.NET MVC2和MEF – 为什么我的MefControllerFactory不能获得导出或MetaData?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3600字,纯文字阅读大概需要6分钟。
内容图文
我正在关注这篇博文:http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-%28MEF%29.aspx,我正在实施MefControllerFactory.
MefControllerFactory代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Web.Mvc;
namespace plugme.Utilities
{
public class MefControllerFactory : IControllerFactory
{
private string pluginPath;
private DirectoryCatalog catalog;
private CompositionContainer container;
private DefaultControllerFactory defaultControllerFactory;
public MefControllerFactory(string pluginPath)
{
this.pluginPath = pluginPath;
this.catalog = new DirectoryCatalog(pluginPath);
this.container = new CompositionContainer(catalog);
this.defaultControllerFactory = new DefaultControllerFactory();
}
#region IControllerFactory Members
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
IController controller = null;
if (controllerName != null)
{
string controllerClassName = controllerName + "Controller";
// "Export" isn't recognized
// and "Metadata" (as in c => c.Metadata ) isn't recognized.
Export<IController> export = this.container.GetExports<IController>()
.Where(c => c.Metadata.ContainsKey("controllerName")
&& c.Metadata["controllerName"].ToString() == controllerName)
.FirstOrDefault();
if (export != null)
{
controller = export.GetExportedObject();
}
}
if (controller == null)
{
return this.defaultControllerFactory.CreateController(requestContext, controllerName);
}
return controller;
}
public void ReleaseController(IController controller)
{
IDisposable disposable = controller as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
#endregion
}
}
我得到的错误是:
Error 1 The type or namespace name 'Export' could not be found
(are you missing a using directive or an assembly reference?)
Error 2 'System.Lazy<System.Web.Mvc.IController>' does not contain a
definition for 'Metadata' and no extension method 'Metadata'
accepting a first argument of type
'System.Lazy<System.Web.Mvc.IController>' could be found
(are you missing a using directive or an assembly reference?)
Error 3 'System.Lazy<System.Web.Mvc.IController>' does not contain a
definition for 'Metadata' and no extension method 'Metadata'
accepting a first argument of type
'System.Lazy<System.Web.Mvc.IController>' could be found
(are you missing a using directive or an assembly reference?)
我很困惑为什么这不会识别出口或元数据.你们有什么想法吗?
编辑
我换了一行:
Export<IController> export = this.container.GetExports<IController>()
.Where(c => c.Metadata.ContainsKey("controllerName")
&& c.Metadata["controllerName"].ToString() == controllerName)
.FirstOrDefault();
至:
var export = this.container.GetExports<IController>()
.Where(c => c.Metadata.ContainsKey("controllerName")
&& c.Metadata["controllerName"].ToString() == controllerName)
.FirstOrDefault();
这解决了我在元数据方面的问题.但是现在我用下一个if语句引发了一个新错误:
if (export != null)
{
controller = export.GetExportedObject();
}
错误:
'System.Lazy<System.Web.Mvc.IController,System.Collections.Generic.IDictionary<string,object>>' does not contain a definition for 'GetExportedObject' and no extension method 'GetExportedObject' accepting a first argument of type 'System.Lazy<System.Web.Mvc.IController,System.Collections.Generic.IDictionary<string,object>>' could be found (are you missing a using directive or an assembly reference?)
解决方法:
该博客文章基于MEF的预览版. API在最终版本发布之前已更改,您应该使用export.Value而不是export.GetExportedObject().
内容总结
以上是互联网集市为您收集整理的c# – ASP.NET MVC2和MEF – 为什么我的MefControllerFactory不能获得导出或MetaData?全部内容,希望文章能够帮你解决c# – ASP.NET MVC2和MEF – 为什么我的MefControllerFactory不能获得导出或MetaData?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。