首页 > 解决方案 > 将 Autofac 容器更改为 SimpleContainer (Caliburn.Micro)

问题描述

由于非常酷的 WindowManager 功能,我想从 Autofac 切换到 SimpleContainer (Caliburn.Micro),并且我想使用 Caliburn.Micro。

现在我的 Autofac 的东西看起来像这样:

配置

public static IContainer Configure()
{
    var builder = new ContainerBuilder();
    builder.RegisterType<DbContext>().As<IDbContext>();
    builder.RegisterType<DepartmentRepository>().As<IDepartmentRepository>();
    return builder.Build();
}

用法

            var container = ContainerConfig.Configure();
        using (var scope = container.BeginLifetimeScope())
        {
            var test = scope.Resolve<IDepartmentRepository>();
            dept = test.GetById(DepartmentFK);
        }

我已经创建了一个新的引导程序文件

#region SimpleContainer Creation, Configuration and Registration
        private SimpleContainer _container = new SimpleContainer();
        protected override void Configure()
        {
            _container.Instance(_container);

            _container
                .Singleton<IWindowManager, WindowManager>()
                .Singleton<IEventAggregator, EventAggregator>();

            GetType().Assembly.GetTypes()
                .Where(type => type.IsClass)
                .Where(type => type.Name.EndsWith("ViewModel"))
                .ToList()
                .ForEach(viewModelType => _container.RegisterPerRequest(
                    viewModelType, viewModelType.ToString(), viewModelType));
        }
        protected override object GetInstance(Type service, string key)
        {
            return _container.GetInstance(service, key);
        }

        protected override IEnumerable<object> GetAllInstances(Type service)
        {
            return _container.GetAllInstances(service);
        }

        protected override void BuildUp(object instance)
        {
            _container.BuildUp(instance);
        }
        #endregion

使用的东西(scope.resolve<>)看起来如何使用 SimleContainer 而不是 Autofac?

标签: c#caliburn.micro

解决方案


推荐阅读