Я создаю пользовательский ActionResult
для своих контроллеров, потому что я заметил много повторяющихся кодов, которые можно использовать повторно.Это выглядит примерно так:
public ExtendedViewResult<T> : ActionResult
{
protected T Model { get; set; }
protected IModelExtender<T> Extender { get; set; }
public ExtendedActionResult(T model, IModelExtender<T> extender)
{
this.Model = model;
this.Extender = extender;
}
}
public class BaseController : Controller
{
public ExtendedViewResult<T> ExtendedView<T>(T model)
{
// I need to create the result here, but how?
var result = new ExtendedViewResult<T>(model, ???????);
return result;
}
}
Проблема, с которой я столкнулся, заключается в том, что я не уверен, как создать свой объект ExtendedViewResult.Поскольку интерфейс является общим, я хочу использовать Dependency Injection для получения нужного объекта, но я не уверен, как это сделать, поскольку сам создаю объект.
Я использую Ninject и Ninject.MVC3и пакет Nuget по умолчанию создает для меня класс Bootstrapper, и когда я получаю доступ к свойству Bootstrapper.Kernel, я получаю следующее предупреждение:
Ninject.Web.Mvc.Bootstrapper.Kernel is obsolete. Do not use Ninject as Service Locator.
Если я не должен получить доступнапрямую ядро, то как я могу изменить свой код, чтобы я мог получить соответствующий конкретный класс?
EDIT
Вот недействительный код начальной загрузки.Единственный метод, который я добавил, это GetInstance ()
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
// I ADDED THIS CODE, EVERYTHING ELSE IS AUTO-GENERATED
// BY THE NUGET PACKAGE
public static T GetInstance<T>()
{
return bootstrapper.Kernel.Get<T>();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
}
}