我ninject一个巨大的风扇。 然而迄今为止,我只用它的单个应用程序注射。 我现在想打包我服务的基础设施和我所创建的数据层。
基本上我的基础设施层创建存储过程道的,我的服务层需要传递到数据层的合同。 该数据层确实与添加到DAO的参数SP呼叫并返回一个数据集。 所有这一切工作出色。
我用他们三个都基于构造函数的依赖注入,我想和他们一起预包装国际奥委会。 这样,当我在另一个应用程序中使用它们,我没有重新布线的依赖注入的DLL中的类。
每目前我用ninject时间,我电汇了ninject webcommon,做整个应用程序上下。
namespace MyApp.App_Start
{
using System;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility
.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility
.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
AutoMapper.AutoMapperConfigurator.Configure();
try
{
kernel.Bind<Func<IKernel>>()
.ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>()
.To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IQuerySelector>().To<QuerySelector>();
kernel.Bind<IQueryExecutor>().To<QueryExecutor>();
kernel.Bind<ISqlParameterPopulationService>()
.To<SqlParameterPopulationService>();
}
}
我想在我的预包装DLL的开发商不访问一个IOC,然后用户可以拥有他/她自己的IOC,他们会增加他们的所有注射到的。