MVC 使用MEF依赖注入的蛋疼问题
最近在用MEF做IOC,遇到两个问题,网上搜不出资料,难道是这个组件都没有人用了?!
1. MVC 自定义Filter,不能注入。
2. 定义了一个父Controller,不能注入。其他controller继承于它。
有解决方案的帮帮忙,谢谢
1. MVC 自定义Filter,不能注入。
2. 定义了一个父Controller,不能注入。其他controller继承于它。
有解决方案的帮帮忙,谢谢
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class AdminAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
public static class MefConfig
{
public static void RegisterMef()
{
var container = ConfigureContainer();
ControllerBuilder.Current.SetControllerFactory(new MefControllerFactory(container));
var dependencyResolver = System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver;
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new MefDependencyResolver(container);
}
private static CompositionContainer ConfigureContainer()
{
var catalog = new AggregateCatalog(new DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath));
var container = new CompositionContainer(catalog);
HttpContext.Current.DisposeOnPipelineCompleted(container);
return container;
}
}
public class MefDependencyResolver : IDependencyResolver
{
private readonly CompositionContainer _container;
public MefDependencyResolver(CompositionContainer container)
{
_container = container;
}
public IDependencyScope BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
var export = _container.GetExports(serviceType, null, null).SingleOrDefault();
return null != export ? export.Value : null;
}
public IEnumerable<object> GetServices(Type serviceType)
{
var exports =_container.GetExports(serviceType, null, null);
var createdObjects = new List<object>();
if (exports.Any())
{
foreach (var export in exports)
{
createdObjects.Add(export.Value);
}
}
return createdObjects;
}
public void Dispose()
{
}
}
public class MefControllerFactory : DefaultControllerFactory
{
private readonly CompositionContainer _compositionContainer;
public MefControllerFactory(CompositionContainer compositionContainer)
{
_compositionContainer = compositionContainer;
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
var export = _compositionContainer.GetExports(controllerType, null, null).SingleOrDefault();
IController result;
if (null != export)
{
result = export.Value as IController;
}
else
{
result = base.GetControllerInstance(requestContext, controllerType);
_compositionContainer.ComposeParts(result);
}
return result;
}
}
...全文
相关推荐
MVC插件通过MEF并注入Autofac.zip
本文将详细探讨如何使用MEF与Autofac在MVC项目中协同工作来构建插件化的应用。首先,让我们了解MEF。
SQLServerMEF依赖注入MVCRepository框架InjectExample.zip
这是一个关于使用SQL Server,MEF(Managed Extensibility Framework)和Repository模式进行依赖注入的示例项目。
wcf,entityframework,mef,mvc框架源码含仓储模式
在“压缩包子文件的文件名称列表”中提到的“RestfulWebAPIDemo”可能是一个演示项目,展示了如何使用ASP.NET MVC框架来创建RESTful Web API。
Beethoven:使用 Asp.Net MVC 和 MEF 构建基于插件的 Web 应用程序的轻量级框架
贝多芬使用 Asp.Net MVC 和 MEF 构建基于插件的 Web 应用程序的轻量级框架。依赖关系 - 用于为 Beethoven 编写的主机开发/扩展插件的包例子 - 使用 Beethoven
Managed Extensibility Framework(MEF)
在实际开发中,结合`.NET`的其他技术如WPF、ASP.NET MVC等,MEF可以构建高度可扩展的桌面和Web应用。


