У меня есть существующее приложение MVC, которое использует Injection Dependency с Ninject. Я установил пакет Ninject.MVC3 nuget и создал класс под названием NinjectWebCommon в моем App_Start, который полностью изолирует ядро и регистрирует все мои привязки:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IFoo>().To<Foo>();
}
У нас есть новое требование, которое мы думали, что SignalR сможет удовлетворить, поэтому мы установили пакет SignalR 2 nuget в проект. Я создал концентратор и немного поработал над тем, как внедрить инъекцию зависимостей в проект, и нашел статью, которая предлагает создать SignalRDependencyResolver. http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection
В статье вы создаете ядро в файле Startup.cs, который используется для регистрации SignalR в OWIN:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var kernel = new StandardKernel();
var resolver = new NinjectSignalRDependencyResolver(kernel);
kernel.Bind<IStockTicker>()
.To<Microsoft.AspNet.SignalR.StockTicker.StockTicker>() // Bind to StockTicker.
.InSingletonScope(); // Make it a singleton object.
kernel.Bind<IHubConnectionContext>().ToMethod(context =>
resolver.Resolve<IConnectionManager>().GetHubContext<StockTickerHub>().Clients
).WhenInjectedInto<IStockTicker>();
var config = new HubConfiguration()
{
Resolver = resolver
};
app.MapSignalR(config);
}
}
Проблема заключается в том, что этот подход позволяет мне создавать два разных ядра, и они, похоже, имеют свой собственный набор зависимостей, которые они знают, как их разрешать. Если у меня есть зависимость, определенная в NinjectWebCommon, концентратор не знает, как разрешить эту зависимость. Не подвергая мое ядро в NinjectWebCommon, каков правильный способ добавить DI в SignalR с помощью пакета Ninject.MVC3?