Autofa c зарегистрироваться с папкой - PullRequest
1 голос
/ 26 марта 2020

пользуюсь автофой c. У меня здесь много уроков, и я должен добавить каждый в отдельности. Кроме того, все мои занятия не находятся в одном файле. Могу ли я напрямую сохранить классы в этом файле, указав путь к файлу?

        ContainerBuilder builder = new ContainerBuilder();

        builder.RegisterControllers(Assembly.GetExecutingAssembly());


        builder.RegisterType<CommonBusinessLayer.MyCommonMethods.MailController>().SingleInstance();
        ..........
        ..........
        ..........
        builder.RegisterType<Mvc.MyMethods.Concrete.CacheCategory>().SingleInstance();

        IContainer container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

Можете ли вы помочь с классами "CommonBusinessLayer.MyCommonMethods.MailController" и "Mvc .MyMethods.Concrete.CacheCategory" в пример?

Поэтому я пишу снова и снова для регистрации каждого класса.

builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.BController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.CController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.DController>().SingleInstance();

Можем ли мы зарегистрироваться, указав прямой путь к файлу?

builder.RegisterType <<strong> CommonBusinessLayer.MyCommonMethods. .cs *> (). SingleInstance ();

Я хочу это, потому что у меня слишком много классов. Все они находятся в разных файлах.

CommonBusinessLayer.MyCommonMethods
| -> AController, BController, CController, DController, EController, FController, ....
Mvc .MyMethods.Concrete
| -> XController, YController, ZController, ....

и я пишу каждый для их регистрации.

builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();
builder.RegisterType<CommonBusinessLayer.MyCommonMethods.AController>().SingleInstance();

builder.RegisterType<Mvc.MyMethods.Concrete.XController>().SingleInstance();
builder.RegisterType<Mvc.MyMethods.Concrete.YController>().SingleInstance();
builder.RegisterType<Mvc.MyMethods.Concrete.ZController>().SingleInstance();

Можем ли мы зарегистрировать контроллеры для файла вместо этого?

пример:

 builder.RegisterType<CommonBusinessLayer.MyCommonMethods.*.cs>().SingleInstance();
 builder.RegisterType<Mvc.MyMethods.Concrete.*.cs>().SingleInstance();

Ben denedim, böyle;

    ContainerBuilder builder = new ContainerBuilder();

    builder.RegisterControllers(Assembly.GetExecutingAssembly());

    var dataAccess = Assembly.GetExecutingAssembly();

    builder.RegisterAssemblyTypes(dataAccess)
           .Where(t => t.Name.StartsWith("Repository"))
           .SingleInstance();

    //builder.RegisterType<RepositoryUser>().SingleInstance();
    //builder.RegisterType<RepositoryCategory>().SingleInstance();
    //builder.RegisterType<RepositoryProvince>().SingleInstance();
    //..........
    //builder.RegisterType<RepositoryDistrict>().SingleInstance();

    IContainer container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

и результат;

Ни один из конструкторов не найден с 'Autofa c .Core.Activators.Reflection.DefaultConstructorFinder 'on type' Mvc .Controllers.KonumController 'может быть вызван с доступными службами и параметрами: Невозможно разрешить параметр' CommonBusinessLayer.Repository.RepositoryDistrict repoDistrict 'конструктора' Void .ctor (CommonBusinessLay. Repository.RepositoryDistrict, CommonBusinessLayer.Repository.RepositoryUser) '.

1 Ответ

1 голос
/ 26 марта 2020

Его работа.

Мой репозиторий наследуется от repositoryBase. С помощью RepositoryBase я ввел путь к файлу и записал, что в нем начинается с Repository.

 builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(RepositoryBase))).Where(p => p.Name.StartsWith("Repository")).SingleInstance();
...