当前位置: 首页>>代码示例>>C#>>正文


C# IUnityContainer.RegisterCatalog方法代码示例

本文整理汇总了C#中IUnityContainer.RegisterCatalog方法的典型用法代码示例。如果您正苦于以下问题:C# IUnityContainer.RegisterCatalog方法的具体用法?C# IUnityContainer.RegisterCatalog怎么用?C# IUnityContainer.RegisterCatalog使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IUnityContainer的用法示例。


在下文中一共展示了IUnityContainer.RegisterCatalog方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CreateContainer

        protected override IContainerFacade CreateContainer()
        {
            // Create Unity
            m_Container = new UnityContainer();

            // Add MEF catalogs to the Unity
            m_Container.RegisterCatalog(new AssemblyCatalog(Assembly.GetEntryAssembly()));
            m_Container.RegisterCatalog(new DirectoryCatalog("."));

            return new UnityContainerFacade(m_Container);
        }
开发者ID:pwlodek,项目名称:CodeGallery,代码行数:11,代码来源:Bootstrapper.cs

示例2: PluginContainer

        public PluginContainer(string pluginsPath, IUnityContainer container)
        {
            PluginsPath = pluginsPath;

            var config = WebConfigurationManager.OpenWebConfiguration("~");
            var compilation = (CompilationSection)config.GetSection("system.web/compilation");

            var absolutePath = HttpContext.Current.Server.MapPath(pluginsPath);
            var catalogs = new List<ComposablePartCatalog>();
            var mustSave = false;

            foreach (var directory in Directory.GetDirectories(absolutePath)) {
                var actualDirectory = Path.Combine(directory, "bin");
                if (!Directory.Exists(actualDirectory))
                    actualDirectory = directory;
                var catalog = new DirectoryCatalog(actualDirectory);
                catalogs.Add(catalog);

                var name = AssemblyName.GetAssemblyName(Path.Combine(actualDirectory, Path.GetFileName(directory) + ".dll")).FullName;
                if (!compilation.Assemblies.OfType<AssemblyInfo>().Any(a => a.Assembly == name)) {
                    //compilation.Assemblies.Add(new AssemblyInfo(name));
                    //mustSave = true;
                }

                var baseDir = actualDirectory.Replace(AppDomain.CurrentDomain.BaseDirectory, "");
                var runtimeSection = config.GetSection("runtime");
                var xml = runtimeSection.SectionInformation.GetRawXml();
                var xdoc = XDocument.Parse(xml);
                var probing = xdoc.Descendants(XName.Get("probing", "urn:schemas-microsoft-com:asm.v1")).FirstOrDefault();
                var path = probing.Attributes().FirstOrDefault(a => a.Name == "privatePath");
                if (path.Value == null || !path.Value.Contains(baseDir)) {
                    path.Value = path.Value +
                        (string.IsNullOrEmpty(path.Value) ? "" : ";") +
                        baseDir;
                    xml = xdoc.ToString();
                    //runtimeSection.SectionInformation.SetRawXml(xml);
                    //mustSave = true;
                }
            }
            if (mustSave)
                config.Save();

            compositionCatalog = new AggregateCatalog(catalogs);
            CompositionContainer = new CompositionContainer(compositionCatalog);
            container.RegisterCatalog(compositionCatalog);

            AppDomain.CurrentDomain.AssemblyResolve += (s, e) => {
                   var name = new AssemblyName(e.Name);
                var rootPath = Path.Combine(absolutePath, name.Name);
                var file = Path.Combine(rootPath, name.Name + ".dll");

                Assembly result = null;
                try {
                    result = Assembly.LoadFrom(file);
                }
                catch (Exception ex) {
                    Debug.WriteLine(ex.ToString());

                    rootPath = Path.Combine(rootPath, "bin");
                    file = Path.Combine(rootPath, name.Name + ".dll");
                    try {
                        result = Assembly.LoadFrom(file);
                    }
                    catch (Exception ex2) {
                        Debug.WriteLine(ex2.ToString());
                    }
                }

                return result;
            };
        }
开发者ID:Inferis,项目名称:KindjesNet,代码行数:71,代码来源:PluginContainer.cs


注:本文中的IUnityContainer.RegisterCatalog方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。