Использовать внедрение зависимостей в приложении WinForm - PullRequest
1 голос
/ 07 апреля 2020

Я использую autofa c в этом сценарии в моем приложении winform. Это первый раз, когда я использую autofa c, и мне понадобятся подробные ответы на мой вопрос ниже.

У меня есть следующий код в моей программе.cs

ContainerBuilder autofac = new ContainerBuilder();

autofac.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsSelf().AsImplementedInterfaces();

Container = autofac.Build();

using (var scope = Container.BeginLifetimeScope())
{
    var writer = scope.Resolve<Application>();
}

В моей службе у меня есть следующий код

public class A
{
    Iservice _service

    public A(Iservice service)
    {
          _service=service
    }
}

Теперь в моей форме мне нужно позвонить в службу после нажатия кнопки. Кажется, я не могу понять, как продолжить отсюда. Как мне позвонить в службу сейчас? если я внедряю интерфейс в конструктор frmLogin, мне нужно передать интерфейс в качестве параметра. Вот мой код события ниже

public frmLogin()
{
    InitializeComponent();
}
public button_Click_Event(object sender,EventArgs e){

    //Service myservice= new Service();

}

1 Ответ

1 голос
/ 10 мая 2020

Я предполагаю, что A - это служба, и вы хотите вызывать методы из A в форме.

Ваша служба должна выглядеть следующим образом:

public class A : IService
{
    [...]
}

IService должен быть:

public interface IService
{
    [...]
}

Ваша форма теперь может принимать IService в конструкторе.

private readonly IService service;

public frmLogin(IService service)
{
    this.service = service;
    InitializeComponent();
}
public button_Click_Event(object sender,EventArgs e) 
{
    // now you can call service.anything here.
}

Независимо от того, * * * Ваша форма должна предоставить IService для формы сейчас .

...