方法XXX由于其保护级别而无法访问

时间:2016-09-14 07:03:53

标签: c# unity-container

我有一个奇怪的问题。我使用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());

        }
    }

3 个答案:

答案 0 :(得分:2)

你必须上课public。始终对方法,属性和类使用修饰符非常有用。

答案 1 :(得分:1)

你必须上课public。如果没有修饰符,则默认值为internal,这对于您的目的来说不够“可见”。另请参阅here

答案 2 :(得分:1)

您可以尝试解决SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 5 minute) AND date_sub(now(), interval 10 minute) GROUP BY user_id 而非特定实施。

如果您解决具体类型而不是接口,那么通常只使用统一或依赖注入/控制反转的一半功率。

BTW:实现应该大部分时间都是ILoggerService,而另一方面接口往往是internal