方法XXX的保护级别不允许访问

本文关键字:不允许 访问 保护 XXX 方法 | 更新日期: 2023-09-27 18:07:05

我有一个奇怪的问题。我使用Unity作为IOC/DI。我想创建类LoggerService的实例,但错误程序'LoggerService. logexception (System. log . service)。异常,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());
        }
    }

方法XXX的保护级别不允许访问

您必须使您的类为public。对于方法、属性和类,总是使用修饰符是很有用的。

您可以尝试解决ILoggerService而不是特定的实现。

如果你解析具体的类型而不是接口,一般来说,你只使用了unity或依赖注入/控制反转的一半功能。

BTW:实现应该大多数时候是internal,而另一方面接口倾向于public

你必须让你的类public。如果没有修饰符,默认值是internal,这对于您的目的来说不够"可见"。