Asp.net mvc 5 如何设置自动传真注册

Asp.net mvc 5 如何设置自动传真注册,asp.net-mvc-5,autofac,Asp.net Mvc 5,Autofac,我是依赖注入的新手,我决定使用autofac,因为它似乎对MVC5有最好的“开箱即用”支持(其他可能更好,但我是这方面的新手) 我正在创建简单的使用场景,从wiki上我在application\u start的global.asax中获得了以下代码 protected void Application_Start() { var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcAppl

我是依赖注入的新手,我决定使用autofac,因为它似乎对MVC5有最好的“开箱即用”支持(其他可能更好,但我是这方面的新手)

我正在创建简单的使用场景,从wiki上我在
application\u start
global.asax中获得了以下代码

protected void Application_Start()
{
    var builder = new ContainerBuilder();
    builder.RegisterControllers(typeof(MvcApplication).Assembly);
    builder.RegisterType<ArtistController>().InstancePerHttpRequest();
    builder.RegisterType<ArtistService>().As<IArtistService>().SingleInstance();
    builder.RegisterType<ArtistRepository>().As<IArtistRepository>().SingleInstance();
    builder.RegisterType<BandMemberRepository>().As<IBandMemberRepository>).SingleInstance();
    var container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));



    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
 }
据我所知,它应该为我注册所有东西,但它不起作用。我做错什么了吗


好的,谢谢你的建议

autofac网站显示了一个使用lambdas的示例,因此我在global.asax中添加了这个示例

builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
               .Where(t => t.Name.EndsWith("Repository"))
               .AsImplementedInterfaces();

builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
               .Where(t => t.Name.EndsWith("Service"))
               .AsImplementedInterfaces();
但是这不起作用,你知道为什么吗?

我的大部分注册(90%以上)都是用这个属性标记的:

[AttributeUsage(AttributeTargets.Class)]
[JetBrains.Annotations.MeansImplicitUse]
公共类AutoRegisterAttribute:属性{}
然后我使用此模块注册这些类:

公共类自动注册模块:模块
{
专用只读程序集[]\u assembliesToScan;
公共自动注册模块(参数程序集[]集合扫描)
{
_assembliesToScan=assembliesToScan;
}
受保护的覆盖无效负载(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(_assembliesToScan)
.Where(t=>t.GetCustomAttribute(false)!=null)
.AsSelf()
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
用于调用Assembly()的公共静态自动注册模块
{
返回新的自动注册模块(Assembly.GetCallingAssembly());
}
}
因此,当我构建容器时,我通常只做:

builder.RegisterModule(AutoRegisterModule.ForCallingAssembly());
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
               .Where(t => t.Name.EndsWith("Repository"))
               .AsImplementedInterfaces();

builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
               .Where(t => t.Name.EndsWith("Service"))
               .AsImplementedInterfaces();