Вот возможный обходной путь ... Используйте KernelPersister для определения состояния ядра и ссылки на него непосредственно из вашего базового представления. Это не так красиво и незаметно, как инъекция в конструктор, но это помогает.
KernelPersister может выглядеть следующим образом ...
public static class KernelPersister
{
static IKernel persistedKernel;
/// <summary>
/// Persists the provided kernel
/// </summary>
public static void Set(IKernel kernel)
{
if(persistedKernel == null)
{
throw new ArgumentNullException("kernel");
}
persistedKernel = kernel;
}
/// <summary>
/// Gets the persisted kernel
/// </summary>
public static IKernel Get()
{
if(persistedKernel == null)
{
throw new Exception("The kernel must be actively set in the persister");
}
return persistedKernel;
}
}
Базовый вид может выглядеть следующим образом ...
public abstract class MyBaseView : System.Web.Mvc.WebViewPage
{
/// <summary>
/// Gets access to the MyService
/// </summary>
protected IMyService MyService {get; private set;}
/// <summary>
/// ctor the Mighty
/// </summary>
public MyBaseView()
{
var kernel = KernelPersister.Get();
this.MyService = kernel.GetService(typeof(IMyService)) as IMyService;
}
}