public void Register(ContainerBuilder builder, SmartConfig config) { builder.RegisterType <Context.SampleDbContext>().As <DbContext>().InstancePerLifetimeScope(); builder.RegisterType <Context.OtherDbContext>().As <Context.IOtherDbContext>().InstancePerLifetimeScope(); builder.RegisterGeneric(typeof(EFRepository <>)).As(typeof(IRepository <>)).InstancePerLifetimeScope(); builder.RegisterGeneric(typeof(EFRepository <,>)).As(typeof(IRepository <,>)).InstancePerLifetimeScope(); }
public void Register(Autofac.ContainerBuilder builder, SmartConfig config) { builder.RegisterGeneric(typeof(ITmpl <>)).As(typeof(IT <>)).InstancePerLifetimeScope(); builder.RegisterGeneric(typeof(ITmpl <,>)).As(typeof(IT <,>)).InstancePerLifetimeScope(); builder.RegisterType <TestClass>().AsSelf().PropertiesAutowired().SingleInstance(); builder.RegisterType <TestClass2>().AsSelf().PropertiesAutowired().SingleInstance(); }
public static IContainerManager Initialize(SmartConfig config = null, bool forceRecreate = false) { if (Singleton <IContainerManager> .Instance == null || forceRecreate) { var container = new ContainerManager(); container.Initialize(config); Singleton <IContainerManager> .Instance = container; } return(Singleton <IContainerManager> .Instance); }
/// <summary> /// 初始化组件和插件。 /// </summary> /// <param name="config">配置对象</param> public void Initialize(SmartConfig config) { // 设置配置文件 if (config == null) { config = new SmartConfig(); } // 注册依赖 RegisterDependencies(config); // 启动时运行的任务 if (!config.IgnoreStartupTasks) { RunStartupTasks(); } }
[MethodImpl(MethodImplOptions.Synchronized)]// 同步方式执行该方法 public static IContainerManager InitializeMvc(this Core.SmartContext context, SmartConfig config = null, bool forceRecreate = false) { // 删除不必要的HTTP响应头 "X-AspNetMvc-Version" MvcHandler.DisableMvcResponseHeader = true; var icm = Core.SmartContext.Initialize(config, forceRecreate); var cm = icm as ContainerManager; if (cm != null) { DependencyResolver.SetResolver(new AutofacDependencyResolver(cm._container)); } System.Web.Mvc.ViewEngines.Engines.Clear(); System.Web.Mvc.ViewEngines.Engines.Add(new SmartRazorViewEngine()); return(cm); }
/// <summary> /// 依赖注册 /// </summary> /// <param name="config">配置对象</param> protected virtual void RegisterDependencies(SmartConfig config) { // 初始化容器 var builder = new Autofac.ContainerBuilder(); #region 注册依赖实例 builder.RegisterInstance(config).As <SmartConfig>().SingleInstance(); builder.RegisterType <DefaultDependencyResolver>().As <IDependencyResolver>().SingleInstance(); builder.RegisterInstance(config.TypeFinder).As <ITypeFinder>().SingleInstance(); builder.RegisterInstance(this).As <IContainerManager>().SingleInstance(); builder.RegisterType <Caching.HttpCache>().Named <Caching.ICache>(SmartContext.DEFAULT_CACHE_KEY).SingleInstance(); builder.RegisterInstance(new Export.HtmlExcelExport()).As <Export.IExport>().SingleInstance(); #endregion #region 注册实现 IDependency 接口的依赖类型 var dependencies = config.TypeFinder.ForTypesDerivedFrom <IDependency>().ToList(); foreach (var dependency in dependencies) { var reg = builder.RegisterType(dependency) .AsImplementedInterfaces() // 注册所有接口 .PropertiesAutowired() // 自动属性注入 ; if (typeof(ISingletonDependency).IsAssignableFrom(dependency)) { reg.SingleInstance(); } else if (typeof(ITransientDependency).IsAssignableFrom(dependency)) { reg.InstancePerDependency(); } else { reg.InstancePerLifetimeScope(); } } #endregion #region 注册其他程序集所提供的依赖关系(实现 IDependencyRegistrar 接口的类) var drInstances = config.TypeFinder.ForTypesDerivedFrom <IDependencyRegistrar>() .ToInstances <IDependencyRegistrar>() .OrderBy(t => t.Order) .ToList(); foreach (var dependencyRegistrar in drInstances) { dependencyRegistrar.Register(builder, config); } #endregion this._container = builder.Build(); // 注册完成后处理 if (config.OnDependencyRegistered != null) { config.OnDependencyRegistered(this._container); } }
public void Register(ContainerBuilder builder, SmartConfig config) { //Controllers builder.RegisterFilterProvider(); builder.RegisterControllers(config.TypeFinder.Assemblies.ToArray()); }