我想在我的asp.net mvc 3应用程序中使用MEF,但我无法实现注入。下面是代码:使用mef与asp.net mvc 3
我有有一个接口类库:
namespace Namespace.Interfaces
{
public interface IMessenger
{
string GetMessage();
}
}
而在另一个类库我有类从IMessenger的继承:
namespace Namespace.Message
{
[Export(typeof(IMessenger))]
public class Messenger : IMessenger
{
public Messenger()
{
}
public string GetMessage()
{
return "Mef Test!";
}
}
}
我有一个“零件“目录在我的应用程序,我正在复制包含类名为”Messenger“的类库的dll。
在Global.asax中,我有:
private static CompositionContainer _container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
DirectoryCatalog catalog = new DirectoryCatalog(Server.MapPath("Plugins"), "*.dll");
_container = new CompositionContainer(catalog);
_container.ComposeParts();
DependencyResolver.SetResolver(new MefDependencySolver(_container));
}
这里是MefDependencyResolver类:
public class MefDependencySolver : IDependencyResolver
{
public MefDependencySolver(CompositionContainer compositionContainer)
{
this.compositionContainer = compositionContainer;
}
private CompositionContainer compositionContainer;
public object GetService(Type serviceType)
{
string name = AttributedModelServices.GetContractName(serviceType);
return compositionContainer.GetExportedValueOrDefault<object>(name);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return this.compositionContainer.GetExportedValues<object>(serviceType.FullName);
}
}
,最后我想在我的控制器那样使用它:
public class HomeController : Controller
{
[ImportAttribute]
public IMessenger _messenger { get; set; }
public HomeController()
{
}
public ActionResult Index()
{
ViewBag.Message = _messenger.GetMessage();
return View();
}
}
但它不创建_messenger对象。我没有将对象引用设置为对象的实例。我究竟做错了什么?
在此先感谢,所有的
我需要帮助。没有线索? – anilca 2011-12-22 10:14:45
为了简化MEF 2中的这种情况,我们已经做了很多工作 - 只有CodePlex版本目前可用,但是您可以给出的任何反馈都会很棒! http://blogs.msdn.com/b/bclteam/archive/2011/11/11/using-mef-2-with-asp-net-mvc-3.aspx – 2011-12-24 16:20:54