【问题标题】:Assembly load on iisiis 上的装配负载
【发布时间】:2012-05-22 15:38:56
【问题描述】:

我在本地机器上创建了 WebApplication。它运作良好。但是当我将此项目部署到 IIS 时,我遇到了问题。
我知道这样做不好,但在ControllerInstaller 我写的是这样的:

container.Register(       
          Classes
         .FromAssembly(Assembly
         .LoadFrom(@"D:\Shevtsov\HarbaHabr\Habra.Web\bin\Habra.Web.dll"))
         .BasedOn<IController>()
         .LifestyleTransient());

很明显,这条路径在服务器上是行不通的...
请告诉我,我必须在这里写什么路径?

附: ControllerInstaller 在程序集中 Habra.ServiceLocation.

【问题讨论】:

  • 您使用的是哪个版本的 MVC?
  • 什么是ControllerInstaller?请标记您正在使用的哪个 IOC 容器。

标签: .net asp.net-mvc iis castle-windsor ioc-container


【解决方案1】:

您可以使用MapPath 方法返回服务器上文件的绝对路径,给定从~/ 表示的Web 应用程序根目录开始的相对路径:

container
    .Register(       
        Classes
            .FromAssembly(
                Assembly
                    .LoadFrom(HostingEnvironment.MapPath("~/bin/Habra.Web.dll"))
            )
            .BasedOn<IController>()
            .LifestyleTransient()
    );

【讨论】:

    【解决方案2】:

    如果您使用的是 MVC 4(或更高版本),我建议使用 PreApplicationStartMethodAttribute,然后只需在您的 Hara.Web 程序集中创建一个如下所示的类:

    [assembly: PreApplicationStartMethod(typeof(Registration), "Register")]
    
    public class Registration
    {
       public static void Register()
       {
         var container = ...;
         container.Register(       
           Classes
           .FromAssembly(Assembly.GetExecutingAssembly())
           .BasedOn<IController>()
           .LifestyleTransient());
       }
    }
    

    Phill Hackc 有一篇关于使用此属性 here 的非常好的博文。

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 2010-10-21
      • 2011-08-30
      • 1970-01-01
      • 2013-04-09
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多