Autofac

SimpleContainer

命名空间

using Caliburn.Micro;

使用方法

public class Bootstrapper : BootstrapperBase
    {
        SimpleContainer _container;

        public Bootstrapper()
        {
            System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

            Initialize();
        }

        protected override void Configure()
        {
            base.Configure();

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

            _container.Singleton<MainWindowViewModel>();
        }

        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);
        }

        protected override void OnStartup(object sender, StartupEventArgs e)
        {
            DisplayRootViewFor<MainWindowViewModel>();
        }
    }

注入的两种方式

第一种,AlarmDBInteraction构造函数依赖了AppSetting,需要全部注入

builder.RegisterType<AppSetting>().As<IAppSetting>().SingleInstance();

builder.RegisterType<AlarmDBInteraction>().As<IAlarmDataService>().SingleInstance();

第二种,手动注册依赖项

builder.Register(c => new AlarmDBInteraction(new AppSetting())).As<IAlarmDataService>().SingleInstance();

或者手动给个空

builder.Register(c => new AlarmDBInteraction(null)).As<IAlarmDataService>().SingleInstance();

第三种,将实例化后的对象以接口方式注入

IFileProvider fileProvider = new MongoDbVarSamplingRateProvider("mongodb://admin:PwdIs123456@127.0.0.1/");

builder.RegisterInstance(fileProvider).SingleInstance();