为我的 MVC 2 应用程序创建引导程序的最佳方法是什么?我正在使用 Unity 和 AutoMapper,并希望尽可能抽象它们的加载和配置。
一个不错的例子在这里(http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell.aspx http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell.aspx),但是 UnityContainer 实现了 IDisposable,并且在该示例中它永远不会被清理。这 (在Bootstrapper中配置Automapper违反了开闭原则? https://stackoverflow.com/questions/1807298/configuring-automapper-in-bootstrapper-violates-open-closed-principle/1810728#1810728)也是一个不错的例子,但他也没有处理 Unity/Disposable 问题。
Here's (http://www.dominicpetifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application)另一个关于如何制作 Bootstrapper 的好例子,但同样没有解决 Unity/Disposable 问题。
我考虑过将 Bootstrapper 对象保留在静态变量中并使其实现 IDisposable,但这听起来不对。
如果您在 Bootstrapper 类中保留对容器的引用,则可以将其处置在应用程序端。
public static class Bootstrapper
{
private static IUnityContainer _container;
public static void Run()
{
_container = new UnityContainer();
// Configure container here...
}
public static void Dispose()
{
_container.Dispose();
}
}
public class YourHttpApplication : HttpApplication
{
protected void Application_Start()
{
Bootstrapper.Run();
}
protected void Application_End()
{
Bootstrapper.Dispose();
}
}
或者您可以从引导程序返回容器,保留对其的引用并将其处置在应用程序端。
public class YourHttpApplication : HttpApplication
{
private IUnityContainer _container;
protected void Application_Start()
{
_container = Bootstrapper.Run();
}
protected void Application_End()
{
_container.Dispose();
}
}
我想这取决于你的喜好。除此之外,问题中列出的任何引导示例都应该是引导应用程序的不错选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)