asp.net mvc 之 IOC ,unity

     在网站初始化时调用这样一句话:更改默认的controller 容器:

    ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory());

UnityControllerFactory()继承了 DefaultControllerFactory,下面加粗的话是更换容器的关键

 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (null == controllerType)
            {
                return null;
            }
            IController controller = (IController)this.UnityContainer.Resolve(controllerType);
            return controller;

        }

在升级Unity版本的时候出错了,说没有那个动态文件文件,Unget 已经是最新的了,反编译最新的dll, 在ILspy 中看到,dll 下的namespace ,在下一级是类。

 <configSections>
 <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
  </configSections>

  <unity>   <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>这样配置就对了。


编译之后,还是错误。说是没有Service.dll, 疑惑!在package下也确实没有!

之后恍然,主界面没有引用这个。这也就是IOC的强大之处。只引用Interface 就可以编译通过,Service.dll是通过配置文件配的,可以替换,只要替换者实现这个接口就行。

最后在Controller 的构造函数中传入接口即可使用了。

 public class UsersController : Controller
    {
        private WanJiaTaiContext db = new WanJiaTaiContext();
        ISex sex;
        public UsersController(ISex _sex)
        {
            sex = _sex;

        }

........................

}

另外,有一条配置是这样的

<register type="System.Data.Entity.DbContext,EntityFramework" mapTo="WanJiaTai.Models.WanJiaTaiContext,WanJiaTai.Models"/>

注意,后面的WanJiaTai.Models 是dll 名称,而不是项目名称,这样会报错: configSection.Configure(container, containerName);

所以,应该改为 

<register type="System.Data.Entity.DbContext,EntityFramework" mapTo="WanJiaTai.Models.WanJiaTaiContext,WanJiaTai"/>


    






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值