Unity DI 从特定程序集自动注册

2024-01-07

我正在尝试使用 Unity Registration by Convention 功能。 我不知道如何从特定的程序集/项目文件中注册以“Repository”结尾的文件。

container.RegisterTypes(
       AllClasses.FromAssembliesInBasePath(),
       WithMappings.FromMatchingInterface,
       WithName.Default,
       WithLifetime.ContainerControlled);

我只从 MSDN 博客中找到了这个示例(https://blogs.msdn.microsoft.com/agile/2013/03/12/unity-configuration-registration-by-convention/ https://blogs.msdn.microsoft.com/agile/2013/03/12/unity-configuration-registration-by-convention/)帖子,据我了解,这将搜索所有项目/程序集,并查找默认命名约定文件 Class 和 IClass。

我的解决方案中有一个名为 CManager.Repository 的项目,其存储库文件以 *Repository 结尾。它们是自动注册的。

有什么提示或帮助吗?


For auto-registration of unity it's better to separate the Interfacesand Repositories as folder in the repository project with proper naming convention.
enter image description here

如果你拥有全部存储库在单个项目下,不需要扫描所有程序集。这应该注册项目下的所有存储库CManager.Repository

  public static class UnityConfig
   {
     public static void RegisterComponents()
      {
        var container = new UnityContainer();
        var repositoryAssembly = AppDomain.CurrentDomain.GetAssemblies()
            .First(a => a.FullName == "CManager.Repository, Version=X.X.X.X, Culture=neutral, PublicKeyToken=null"); 

        container.RegisterTypes(repositoryAssembly.GetTypes(),
            WithMappings.FromMatchingInterface,
            WithName.Default,
            WithLifetime.ContainerControlled);      

        container.RegisterType<ApplicationDbContext>(new PerResolveLifetimeManager());
       // ................ register other things is needed
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
     }
  } 

我们必须在应用程序上注册统一组件startup,传统上在内部Global.asax.cs文件。所以说UnityConfig.cs启动项目下的文件App_Start folder.

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        UnityConfig.RegisterComponents();
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);            
    }      
}

并确保其他项目连接起来与启动项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity DI 从特定程序集自动注册 的相关文章