1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Lycan80-Autofac.Engine

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Использование Autofac: регистрация компонентов, запуск приложения и разбор сервисов

Регистрация компонентов

Для получения помощи по использованию Autofac можно обратиться к китайской документации Autofac (https://autofaccn.readthedocs.io/zh/latest/index.html).

Регистрация компонентов может быть выполнена в любом месте с использованием интерфейса IDependencyRegistrar.

Атрибут Order определяет порядок регистрации.

Метод Register предоставляет ContainerBuilder для регистрации компонентов и ITypeFinder для динамической загрузки программ и поиска типов в сборках, что может использоваться для динамической загрузки плагинов.

Реализаций IDependencyRegistrar может быть несколько, и они могут быть размещены в любом месте проекта.

Пример кода на C#:

// Surf.Data.dll
public class DependencyRegistrar : IDependencyRegistrar
{
    public int Order => 1;

    public void Register(ContainerBuilder builder, ITypeFinder typeFinder)
    {
        // Регистрация универсальных типов
        builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
    }
}

// Surf.Service.dll
public class DependencyRegistrar2 : IDependencyRegistrar
{
    public int Order => 2; // или 1

    public void Register(ContainerBuilder builder, ITypeFinder typeFinder)
    {
        builder.RegisterType<Service>().As<IService>().InstancePerLifetimeScope();
    }
}

Дополнительные сведения о регистрации компонентов можно найти в китайской документации Autofac — «Компоненты регистрации» (https://autofaccn.readthedocs.io/zh/latest/register/parameters.html) и английской документации Autofac — Registration Concepts (https://autofac.readthedocs.io/en/latest/register/registration.html).

О жизненном цикле

Дополнительная информация о жизненном цикле при регистрации компонентов доступна в статье «Жизненный цикл или область действия экземпляра» (https://autofaccn.readthedocs.io/zh/latest/lifetime/instance-scope.html).

Запуск приложения

При запуске приложения вызывается EngineContext.Initialie() для инициализации регистрации, после чего сервисы могут быть разрешены в любом месте.

В методе Main для запуска консольных приложений и служб используется следующий код:

static void Main(string[] args)
{
    EngineContext.Initialize();
}

Для запуска приложений .NET Framework необходимо вызвать EngineContext.Initialize() в методе Application_Start() класса Global.cs:

protected void Application_Start()
{
    // Инициализация
    EngineContext.Initialize();           

    // Для Web Mvc требуется установить ссылку PM> Install-Package Autofac.Mvc5
    System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(EngineContext.Scope));  

    // Для Web Api требуется установить ссылку PM> Install-Package Autofac.WebApi2
    System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(EngineContext.Scope);                
}

Для запуска .NET Core приложений необходимо вызвать EngineContext.Initialize(services) в методе ConfigureServices класса Startup.cs. Также необходимо изменить тип возвращаемого значения метода ConfigureServices с Void на IServiceProvider:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    // Необходимо вернуть значение для API
    return EngineContext.Initialize(services, ScopeTag.Http);       
    //или вернуть EngineContext.Initialize(services);    //для Web / Api
}

Дополнительную информацию о запуске приложений можно найти в статье «Application Startup» (https://autofaccn.readthedocs.io/zh/latest/getting-started/index.html#id3) и «Application Startup» на английском языке (https://autofac.readthedocs.io/en/latest/getting-started/index.html#application-startup).

Разрешение сервисов

Сервисы могут быть получены с помощью метода EngineContext.Resolve в любом месте приложения. Если необходимо использовать BeginLifetimeScope(), то это можно сделать следующим образом:

using(var scope = EngineContext.BeginLifetimeScope())
{
   var service = scope.Resolve<IService>();
   var service2 = scope.Resolve<IService2>();
}

Более подробную информацию о разрешении сервисов можно найти в статье «Разрешение сервисов» (https://autofaccn.readthedocs.io/zh/latest/resolve/index.html). builder.RegisterType().As().InstancePerLifetimeScope();

匹配后缀注册 typeEndName

// 注册 Services.dll 下所有 以Service结尾的服务。
// 如:AppRoleService、WorksheetService、
builder.RegisterAssemblyTypes(typeFinder, "Services.dll", typeEndName: "Service").AsImplementedInterfaces().InstancePerLifetimeScope();

泛型注册 RegisterGeneric

builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope(); // or SingleInstance()

单例服务的注册 SingleInstance

builder.RegisterType<CacheService>().As<ICacheService>().SingleInstance();

Пример кода можно посмотреть: Samples.

NuGet: Autofac.Engine

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Версия GitHub: https://github.com/MSSurfing/Autofac.Engine (поддерживает Net Core). Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/Lycan80-Autofac.Engine.git
git@api.gitlife.ru:oschina-mirror/Lycan80-Autofac.Engine.git
oschina-mirror
Lycan80-Autofac.Engine
Lycan80-Autofac.Engine
master