Autofac访问安全性问题

困扰了我一天的问题终于在下班之前解决了!


想用Autofac搭一个框架,引入了Autofac、Autofac.Configuration、Autofac.Mvc5这几个包。然后用下面代码注册依赖注入:

public class AutofacIocConfig
    {
        /// <summary>
        /// 用Autofac注册Assembly程序集依赖
        /// </summary>
        public static void RegisterAssemblyDependency()
        {
            var builder = new ContainerBuilder();

            var assemblyList = AppDomain.CurrentDomain.GetAssemblies().ToList();

            //
            var repositoryType = typeof(IRepository);
            builder.RegisterAssemblyTypes(assemblyList.ToArray())
                .Where(type => repositoryType.IsAssignableFrom(type) && !type.IsAbstract && type != repositoryType)//IsAssignableFrom -- 确定当前Type的实例是否可以从指定Type的实例分配
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();//InstancePerLifetimeScope 保证对象生命周期基于请求

            var serviceType = typeof(IService);
            builder.RegisterAssemblyTypes(assemblyList.ToArray())
                .Where(type => serviceType.IsAssignableFrom(type) && !type.IsAbstract && type != serviceType)//IsAssignableFrom -- 确定当前Type的实例是否可以从指定Type的实例分配
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();//InstancePerLifetimeScope 保证对象生命周期基于请求

            builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();

            IContainer container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }

运行一些结果失败了!页面报错,

安全透明方法“Autofac.Integration.Mvc.RequestLifetimeScopeProvider..ctor(Autofac.ILifetimeScope)”尝试访问安全关键类型“Autofac.ILifetimeScope”失败。

如下图:


然后,就上网查各种资料,StackOverflow上貌似没有对症的。列一个类似的问题吧,方便不是我遇到的这种问题的查找。

StackOverflow (Inheritance security rules violated while overriding member: 'Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)')


有一个是遇到相同问题的:http://www.cnblogs.com/wj-Mcat/articles/4840541.html#commentform     此链接中截图说的方法试过了,确实解决不了这个问题。可是按他说的在“联机”中查找,结果搜“Autofac”搜不到想要的结果。不过他分析的结果应该是正确的,就是引用的Autofac相关的包的版本的问题。我之前也是像他说的那样拷贝nuget.org网站上的命令来添加的。

于是按以下命令将Autofac相关的包全删了:

1、Uninstall-Package Autofac.Mvc5

2、Uninstall-Package Autofac.Configuration

3、Uninstall-Package Autofac

然后按以下命令重新引入:(注意:不加版本号,让nuget.org自己判断应该引用的版本!)

1、Install-Package Autofac  (此步骤给我安装的版本是Autofac.3.5.2)

2、Install-Package Autofac.Configuration(此步骤给我安装的版本是Autofac.Configuration 3.3.0)

3、Install-Package Autofac.Mvc(这个命令会报错,找不到程序包“Autofac.Mvc”,这下不得不加版本号了)

鉴于之前在StackOverflow上看到的那个问题,安装Autofac.Mvc4有可能会出现另一个安全问题,所以我直接装的Mvc5,至于装Mvc4会不会报那个错误,我没有试,就不管了。

4、Install-Package Autofac.Mvc5(此步骤给我安装的版本是Autofac.Mvc5.3.3.4)


然后再运行,就没有再报错了,搞定!说起来是个很小的问题,但要解决的话,着实能耗费不少时间。


附:引入包的时候不加版本号,nuget.org会自己检查依赖项、判断应该引用的版本,如图:



所以,nuget.org还是挺智能的。


结束!




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值