C# 升级到Enterprise Library 6.0,提供与';企业图书馆集装箱&x27;

C# 升级到Enterprise Library 6.0,提供与';企业图书馆集装箱&x27;,c#,enterprise-library,C#,Enterprise Library,升级到Enterprise Library 6.0后,我遇到以下问题: 私有静态IUnityContainer容器=EnterpriseLibraryContainer.Current.GetInstance() 无法解析EnterpriseLibraryContainer 我在网上找到了另一篇关于EnterpriseLibraryCOntainer的帖子 在企业库的升级说明中指出: “当前上下文中不存在名称'EnterpriseLibraryContainer' 版本6中所有块的引导代码都已更

升级到Enterprise Library 6.0后,我遇到以下问题:

私有静态IUnityContainer容器=EnterpriseLibraryContainer.Current.GetInstance()

无法解析EnterpriseLibraryContainer

我在网上找到了另一篇关于EnterpriseLibraryCOntainer的帖子

在企业库的升级说明中指出:

“当前上下文中不存在名称'EnterpriseLibraryContainer'

版本6中所有块的引导代码都已更改 这些块不再使用Unity来管理 初始化和配置,每个块现在都包含自己的 引导代码。对 EnterpriseLibraryContainer.Current.GetInstance方法来解析 其中一个企业库块中的类型应替换为 特定于块的引导代码。例如,创建日志编写器 基于app.config文件中的配置的实例,您现在可以 使用以下代码:LogWriterFactory LogWriterFactory=new LogWriterFactory();var logWriter=LogWriterFactory.Create()

但我不知道如何处理IUnityContainer的情况。 我能用一下吗

IUnityContainer容器=新的UnityContainer


感谢您的帮助

典型的方法是引导块,向Unity注册适当的对象,并让Unity注入依赖项

例如,如果正在使用日志记录,则将引导块:

LogWriterFactory logWriterFactory = new LogWriterFactory(); 
LogWriter logWriter = logWriterFactory.Create();
并向UnityContainer注册日志编写器:

IUnityContainer container = new UnityContainer();
// Register LogWriter as singleton
container.RegisterInstance<LogWriter>(logWriter);
IUnityContainer container=newunitycontainer();
//将LogWriter注册为singleton
容器注册状态(logWriter);
如果您使用EnterpriseLibraryContainer作为服务定位器,并且希望继续使用相同的方法,那么您可以创建/包装服务定位器实现或创建静态帮助器方法。Unity附带UnityServiceLocator,您可以重用它


如果您不使用Unity,另一种方法是引导块,然后用静态facade方法(例如,
Logger.Write()
)替换对
EnterpriseLibraryContainer.Current.GetInstance()
的调用。

我确实很难做到这一点,因此我正在从Enterprise 5升级到v6(fluent)。我提到,在Codeplex迁移PDF中,它仍然显示EnterpriseLibraryContainer,这不再有效

//app.config

<configSections>
       <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>

我希望这有助于节省大量时间。

您现在正在使用Unity吗?
/// <summary>
/// Set up the Enterprise logging class
/// </summary>
public static class Logging
{
    /// <summary>
    /// Define the logging parameters
    /// </summary>
    public static void DefineLogger()
    {
        var builder = new ConfigurationSourceBuilder();

        string loggerPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

        builder.ConfigureLogging()
               .WithOptions
                 .DoNotRevertImpersonation()
               .LogToCategoryNamed("LogWriter")
               .WithOptions.SetAsDefaultCategory()
                 .SendTo.RollingFile("Rolling Flat File Trace Listener")
                 .RollAfterSize(1000)
                   .FormatWith(new FormatterBuilder()
                     .TextFormatterNamed("Text Formatter")
                       .UsingTemplate(@"Timestamp: {timestamp}{newline}Message: {message},{newline}Category: {category},{newline}Severity: {severity},{newline}Title:{title},{newline}ProcessId: {localProcessId},{newline}Process Name: {localProcessName},{newline}Thread Name: {threadName}"))
                       .ToFile(loggerPath + Properties.Settings.Default.LogFileFolder);

        // Reference app.config
        using (DictionaryConfigurationSource configSource = new DictionaryConfigurationSource())
        {
            builder.UpdateConfigurationWithReplace(configSource);

            Logger.SetLogWriter(new LogWriterFactory(configSource).Create());
        }
    }
}
Logger.Write("This is my log");