Ознакомьтесь с разделом .NET Core Container Adapter :
любые зарегистрированные зависимости .NET Core Startup также доступны для ServiceStack, но зависимости, зарегистрированные в IOC ServiceStack, видны только для ServiceStack.
Поэтому, если вам нужны зависимости, доступные как для ServiceStack, так и для внешних функций ASP.NET Core, таких как MVC, вам необходимо зарегистрировать их в вашем Startup.ConfigureServices()
.
Плагины
Из вашей ссылки :
public override void Configure(Funq.Container container)
{
var serverEventsFeature = new ServerEventsFeature();
// bind server events
serverEventsFeature.Register(this);
container.AddSingleton(new Engine(container.Resolve<IServerEvents>()));
}
Плагины никогда не должны вызываться напрямую, как это, они должны быть зарегистрированы в коллекции плагинов:
Plugins.Add(new ServerEventsFeature());
Плагины регистрируются после запуска Configure()
, если вы хотите зарегистрировать зависимость, которая использует IServerEvents
, зарегистрированную ServerEventsFeature
, вам нужно либо зарегистрировать вашу зависимость с помощью фабричной функции, т.е.:
container.AddSingleton<ICacheClient>(c =>
new Engine(c.Resolve<IServerEvents>()));
В качестве альтернативы вы можете зарегистрировать одноэлементный экземпляр AfterInitCallbacks
, который запускается в конце инициализации AppHost, например:
AfterInitCallbacks.Add(host => {
container.AddSingleton<ICacheClient>(
new Engine(c.Resolve<IServerEvents>()));
});
Если вы хотите зарегистрировать синглтон, который зарегистрировал любой другой плагин, вы можете иметь свой плагин для реализации IPostInitPlugin , который запускается AfterPluginsLoaded()
после регистрации всех плагинов:
public class MyPlugin : IPlugin, IPostInitPlugin
{
public void Register(IAppHost appHost) {}
public void AfterPluginsLoaded(IAppHost appHost)
{
appHost.GetContainer().AddSingleton<ICacheClient>(c =>
new Engine(c.Resolve<IServerEvents>()));
}
}