Как передать экземпляр в Конструктор Контроллера Само-хоста ASP.Net Web API

Я пытаюсь самостоятельно разместить веб-API ASP.NET, используя OWIN. Но в то же время я хочу передать метод обратного вызова через экземпляр в конструктор класса Controller из основного класса. Например

Основной класс:

Public PublishAlert _publishAlert = new PublishAlert(OnPublishAlert);

Где класс PublishAlert:

public class PublishAlert
{
    private Action<string> _onPublishAlertCallBack;

    public PublishAlert(Action<string> onPublishAlertCallBack)
    {
        _onPublishAlertCallBack = onPublishAlertCallBack;
    }

    public void CreateAlert(string message)
    {
        if (_onPublishAlertCallBack != null)
        {
            _onPublishAlertCallBack(message);
        }
    }
}

И метод OnPublishAlert, определенный в классе Main:

private void OnPublishAlert(string message)
{
   DoSomething(message);
}

Конструктор контроллера выглядит следующим образом:

public class ValuesController : ApiController
{
    private PublishAlert _publishAlert = null;

    public ValuesController()
    {
    }

    public ValuesController(PublishAlert publishAlert)
    {
        _publishAlert = publishAlert;

    // Then, invoke the instance's method, e.g.
        _publishAlert.CreateAlert("Please help!");
    }

    ......
 }

Я попытался с помощью Unity Container внедрить экземпляр в конструктор контроллера в классе Main следующим образом, но найти не удалось:

 var server = WebApp.Start(baseAddress, (appBuilder) =>
        {
            // Configure Web API for self-host.
            HttpConfiguration config = new HttpConfiguration();

            var container = new UnityContainer();
            container.RegisterType<PublishAlert, PublishAlert>(new InjectionConstructor(_publishAlert));
            config.DependencyResolver = new UnityResolver(container);

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            appBuilder.UseWebApi(config);
        });

Используя приведенный выше код WebApp.Start, я могу вызвать только беспараметрический конструктор контроллера. Как правильно передать экземпляр в объект Controller?

0 ответов

Другие вопросы по тегам