EN
C# - Error CS1674 "ILogger": The type used in the using statement must be implicitly convertible to the interface "System.IDisposable"
1 answers
0 points
CommonLogger.cs
file:
xxxxxxxxxx
1
namespace ConsoleApp.Logger
2
{
3
class CommonLogger : ILogger
4
{
5
private ILogger[] loggers;
6
7
public CommonLogger(ILogger[] loggers)
8
{
9
this.loggers = loggers;
10
}
11
12
public virtual void Log(params String[] messages)
13
{
14
15
}
16
17
public void Dispose(bool disposing)
18
{
19
this.Dispose(disposing: true);
20
21
GC.SuppressFinalize(this);
22
}
23
}
24
}
Program.cs
file:
xxxxxxxxxx
1
public class Program
2
{
3
public static void Main()
4
{
5
ILogger[] loggers = new ILogger[]
6
{
7
new ConsoleLogger(),
8
new FileLogger(),
9
new SocketLogger(host:"google.com",port:80)
10
};
11
12
using (ILogger logger = new CommonLogger(loggers))
13
{
14
logger.Log("Example message 1 ...");
15
logger.Log("Example message 2 ...");
16
logger.Log("Example message 3 ...", "value 1", "value 2", "value 3");
17
}
18
}
19
}
ILogger.cs
file:
xxxxxxxxxx
1
namespace ConsoleApp.Logger
2
{
3
public interface ILogger : IDisposable
4
{
5
void Log(params String[] messages);
6
}
7
}
IDisposable.cs
file:
xxxxxxxxxx
1
namespace ConsoleApp.Logger
2
{
3
public interface IDisposable
4
{
5
}
6
}
The question was modified by moderator to make it more readable. |
1 answer
1 points
Looking on the question title I think you have problem with using
statement and IDisposable
interface.
C# by default provides IDisposable
interface that can be used to release some resources (unmanaged resources). Classes that implement IDisposable
intereface may be used with using
statement that releases resouces automatically when the using
statement execution is ended.
But your CommonLogger
class implements your own IDisposable
interface that you want to use later in using (ILogger logger = new CommonLogger(loggers))
. The solution for the Error CS1674
is to remove your IDisposable
interface and use the one provided by .NET.
References
0 commentsShow commentsAdd comment