使用Autofact自动扫描装配和按名称注册类型

时间:2013-12-04 05:39:45

标签: registration autofac

我必须从数据库加载命令对象然后执行它。 DB中的命令看起来像(字符串CommandType,对象参数)。 我注册了一些命令如下:

builder.RegisterType<CommandA>().Named<ICommand>(typeof(CommandA).Name);
builder.RegisterType<CommandB>().Named<ICommand>(typeof(CommandB).Name);

//Resolve
var metadata= GetCommandMetadataFromDB();
var command = _lifetimeScope.ResolveNamed<ICommand>(metadata.CommandType);

//Execute it
var someResult= command.Execute(metadata.Parameters);

以下是问题:

  1. 如何按名称从第三方程序集扫描和注册所有继承的ICommand命令?
  2. 这很有用,但很难看。你能建议一个更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用RegisterAssemblyTypes方法从给定的程序集集中注册类型,您也可以使用Named选项生成与手动注册中相同的名称:

builder.RegisterAssemblyTypes(your3rdPartyAssemblies)
       .AssignableTo<ICommand>()
       .Named<ICommand>(týpeToRegister => týpeToRegister.Name);