我想第一次安裝溫莎城堡,我遇到了一些問題。我有我的解決方案三個項目:安裝在MVC的溫莎城堡
- 域
- DAL
- 網絡
的服務位於DAL。它們都從IService
繼承。 (UserService
器具IUserService
,IUserService
器具IService
)。該Web應用程序是一個MVC 5應用程序。所有控制器都從BaseController
繼承。
我用this後幫我設置溫莎,但我不斷收到異常:
型「Castle.MicroKernel.ComponentNotFoundException」的異常出現在Castle.Windsor.dll但在用戶沒有處理代碼
其他信息:支持Solution.Web.Controllers.HomeController發現
服務的成分,不奇怪的是,對於續路徑滾筒是正確的。
下面是我的配置代碼:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel kernel;
public WindsorControllerFactory(IKernel kernel)
{
this.kernel = kernel;
}
public override void ReleaseController(IController controller)
{
kernel.ReleaseComponent(controller);
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
return (IController)kernel.Resolve(controllerType);
}
}
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes.FromThisAssembly()
.BasedOn(typeof(BaseController))
.LifestyleTransient());
}
}
public class ServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Types.FromAssemblyContaining(typeof(IService).GetType())
.BasedOn<IService>().WithService.FromInterface()
.LifestyleTransient()
);
}
}
而且在Global.asax:
public class MvcApplication : System.Web.HttpApplication
{
private static IWindsorContainer container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Setup Castle.Windsor IOC
MvcApplication.BootstrapContainer();
}
protected void Application_End()
{
container.Dispose();
}
private static void BootstrapContainer()
{
container = new WindsorContainer().Install(FromAssembly.This());
container.Install(FromAssembly.Containing(typeof(IService).GetType()));
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
}
在正確的方向任何幫助或指導,不勝感激!
很高興它現在的作品。你最終不得不改變你的控制器註冊? – greyalien007
不用註冊控制器是正確的。再次感謝提示和解釋! – Thijs