• MEF In MVC


    这种方式是利用ControllerFactory来实现的。

    首先我们要自定义自己的ControllerFactory :

    public class MEFControllerFactory : DefaultControllerFactory
        {

            
    private CompositionContainer Container;

            
    public MEFControllerFactory()
            {
                var catalog 
    = new AggregateCatalog(new DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath));
                Container 
    = new CompositionContainer(catalog);
            }

            
    protected override IController GetControllerInstance(RequestContext reqContext,
            Type controllerType)
            {
                
    return Container.GetExportedValue<IController>();
            }
        }

     然后我们在Global.asax.cs里的Application_Start()是注册我们自定义的ControllerFactory:

    protected void Application_Start()
            {
                MEFControllerFactory controllerFactory 
    = new MEFControllerFactory();
                ControllerBuilder.Current.SetControllerFactory(controllerFactory);

                AreaRegistration.RegisterAllAreas();

                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
            }

     基本的工作已经做完了。然后我们就可以按照MEF的方式进行注入了。但是需要注意一点我们的Controller类上面一定要加[PartCreationPolicy(CreationPolicy.NonShared)],因为web多线程调用的原因。Controller最好这样注入[Export(typeof(IController))]。

    当然也可以利用DependencyResolver来实现。

  • 相关阅读:
    空间距离计算
    一种支持多种并行环境的栅格地理计算并行算子
    发布或重启线上服务时抖动问题解决方案
    jetty9优化的两处地方
    mysql空间扩展 VS PostGIS
    多流向算法GPU并行化
    GDAL并行I/O
    深入浅出空间索引:2
    深入浅出空间索引:为什么需要空间索引
    virtualBox中的centOS虚拟机硬盘扩容
  • 原文地址:https://www.cnblogs.com/wenwuxianren/p/2174521.html
Copyright © 2020-2023  润新知