Как передать экземпляр в Конструктор Контроллера Само-хоста 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?