Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static void RegisterType(ContainerBuilder builder)
- {
- builder.RegisterType<MyLogger>().As<ILogger>(); //MyLogger принимает в конструкторе IWriter
- builder.RegisterType<SimpleWriter>().As<IWriter>();
- builder.RegisterType<LogForm>();
- }
- public LogForm(ILogger logger)
- {
- Logger = logger;
- InitializeComponent();
- }
- LogForm можно создать через резолв контейнера (т.к. весь граф ее зависимостей зарегистрирован).
- Как лучше создать LogForm?
- private void btn_OpenForm_Click(object sender, EventArgs e)
- {
- using (var scope = AutofacConfig.Container.BeginLifetimeScope())
- {
- var logForm = scope.Resolve<LogForm>();
- logForm.Show();
- }
- }
- private void btn_OpenForm_Click(object sender, EventArgs e)
- {
- var logForm = AutofacConfig.Container.Resolve<LogForm>();
- logForm.Show();
- }
- private readonly ILifetimeScope _lfScope;
- private void btn_OpenForm_Click(object sender, EventArgs e)
- {
- _lfScope = AutofacConfig.Container.BeginLifetimeScope())
- var logForm = _lfScope.Resolve<LogForm>();
- logForm.Show();
- }
- private void btn_OpenForm_Click(object sender, EventArgs e)
- {
- var logForm = new LogForm();//Создавать без DI и зависимостей.
- logForm.Show();
- }
- //Изменим класс формы LogForm
- public partial class LogForm : Form
- {
- public ILogger Logger { get; set; } //Сервис
- private readonly ILifetimeScope _lfScope; //Управление временем жизни сервиса
- public LogForm()
- {
- _lfScope = AutofacConfig.Container.BeginLifetimeScope();
- Logger = _lfScope.Resolve<ILogger>();
- InitializeComponent();
- }
- public void DoSomething()
- {
- //............
- }
- protected override void OnClosed(EventArgs e)
- {
- _lfScope.Dispose();
- base.OnClosed(e);
- }
- }
- builder.RegisterType<NyLogger>().Named<ILogger>("11").InstancePerLifetimeScope();
- builder.RegisterType<OtherLogger>().Named<ILogger>("22").InstancePerLifetimeScope();
- builder.RegisterType<LogForm>()
- .WithParameter(new ResolvedParameter(
- (pi, ctx) => pi.ParameterType == typeof(ILogger),
- (pi, ctx) => ctx.ResolveNamed<ILogger>("11")
- )).InstancePerDependency();
- public partial class DoubleLogForm : Form
- {
- public ILogger Logger1 { get; set; } //Сервис
- public ILogger Logger2 { get; set; } //Сервис
- private readonly IDisposable _loggerOwner1;
- private readonly IDisposable _loggerOwner2;
- public DoubleLogForm(Owned<ILogger> logger1, Owned<ILogger> logger2)
- {
- Logger1 = logger1.Value;
- _loggerOwner1 = logger1;
- Logger2 = logger2.Value;
- _loggerOwner2 = logger2;
- InitializeComponent();
- }
- }
- builder.RegisterType<NyLogger>().Named<ILogger>("NyLogger").InstancePerLifetimeScope();
- builder.RegisterType<OtherLogger>().Named<ILogger>("OtherLogger").InstancePerLifetimeScope();
- builder.RegisterType<DoubleLogForm>()
- .WithParameters(new List<ResolvedParameter> {
- new ResolvedParameter(
- (pi, ctx) => pi.ParameterType == typeof(Owned<ILogger>),
- (pi, ctx) => ctx.ResolveNamed<Owned<ILogger>>("NyLogger")),
- new ResolvedParameter(
- (pi, ctx) => pi.ParameterType == typeof(Owned<ILogger>),
- (pi, ctx) => ctx.ResolveNamed<Owned<ILogger>>("OtherLogger"))
- }).InstancePerDependency();
- public partial class LogForm : Form
- {
- private readonly Owned<ILogger> Logger;
- public LogForm(Owned<ILogger> logger)
- {
- this.Logger = logger;
- }
- protected override void OnClosed(EventArgs e)
- {
- Logger.Dispose();
- base.OnClosed(e);
- }
- }
- public partial class LogForm : Form
- {
- private readonly ILogger Logger;
- private readonly IDisposable LoggerOwner;
- public LogForm(Owned<ILogger> logger)
- {
- this.Logger = logger.Value;
- this.LoggerOwner = logger;
- }
- protected override void OnClosed(EventArgs e)
- {
- LoggerOwner.Dispose();
- base.OnClosed(e);
- }
- }
- private readonly Func<LogForm> logFormFactory;
- public MainForm(Func<LogForm> logFormFactory)
- {
- this.logFormFactory = logFormFactory;
- }
- private void btn_OpenForm_Click(object sender, EventArgs e)
- {
- logFormFactory().Show();
- }
Add Comment
Please, Sign In to add comment