Asp.net mvc 5 如何设置自动传真注册
我是依赖注入的新手,我决定使用autofac,因为它似乎对MVC5有最好的“开箱即用”支持(其他可能更好,但我是这方面的新手) 我正在创建简单的使用场景,从wiki上我在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
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();