【发布时间】:2016-09-14 07:03:52
【问题描述】:
我有一个奇怪的问题。我使用 Unity 作为 IOC/DI。我想创建类 LoggerService 的实例,但错误出现 'LoggerService.LogException(System.Exception, string, string)' 由于其保护级别'而无法访问'。我有几个 Unity 使用的类,它们具有内部访问修饰符(类没有访问修饰符),并且可以在代码中访问。为什么它在这里不起作用?
我的代码如下:
//console app executable module:
static void CommonOnUnhandledException(Exception exception, string messagePrefix)
{
var logger = Ioc.Resolve<LoggerService>(Config);
logger.LogException(exception, String.Empty, String.Empty);
Console.WriteLine(String.Format("{0} unhandled exception: {1}; {2}", messagePrefix, exception.Message, exception.StackTrace));
}
//library Services.dll
class LoggerService : ILoggerService
{
public LoggerService(AppConfiguration configuration)
{
...
}
public void LogException(Exception ex, string url = "", string messageContent = "")
{
...
}
}
//library services dll, started in console app
public static class ServicesModule
{
public static void Init(UnityContainer container)
{
// register all other ordinary types:
container.RegisterType<IIntelShopService, IntelShopService>(new ContainerControlledLifetimeManager());
container.RegisterType<IBackendService, BackendService>(new ContainerControlledLifetimeManager());
container.RegisterType<IIntelODataService, IntelODataService>(new ContainerControlledLifetimeManager());
container.RegisterType<ILoggerService, Log4NetLoggerService>(new ContainerControlledLifetimeManager());
container.RegisterType<IPerformanceTrackerService, PerformanceTrackerService>(new ContainerControlledLifetimeManager());
}
}
【问题讨论】:
-
LoggerService 默认是内部的,只能在 dll 内部访问。
-
IM 询问 IOC 的问题,而不是没有 IOC 的解决方案!!!
标签: c# unity-container