本文整理汇总了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);
}
示例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;
};
}