Using Rama Krishna Vavilala's
article as a reference, I have been working on developing a data repository model for use at my orgnaization and, with one exception, it works as expected. I have included a simple version of the model that illustrates the issue.
The question: Why do references to the DemoRepository.Devel and DemoRepository.Draft projects have to be included in the ConsoleDemo solution? It works if they are included; the type initializer throws an exception, "Could not load file or assembly [...] or one of it's dependencies.", if they aren't. This does not seem consistent with Rama's MessageBoard example. Isn't the point of the repository pattern to make the actual implementation of the individual repositories (e.g. DemoRepository.Devel and DemoRepository.Draft) invisible to the consumer (e.g ConsoleDemo)?
Solution: ConsoleDemo
Console Application: ConsoleDemo
Added references: DemoRepository, DemoRepository.Devel, DemoRepository.Draft)
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DemoRepository;
namespace ConsoleDemo
{
class Program
{
static void Main(string[] args)
{
int demoValue = DemoSource.GetDemoValue();
Console.WriteLine(demoValue);
Console.WriteLine("...");
Console.ReadLine();
}
}
}
Solution: DemoRepository
Class Library: DemoRepository
DemoSource.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DemoRepository
{
public static class DemoSource
{
private static IDemoRepository _Demo = CreateDemoProvider();
private static IDemoRepository CreateDemoProvider()
{
string typeName =
"DemoRepository.Devel.DemoProvider,DemoRepository.Devel,"+
"Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
Type type = Type.GetType(typeName, true);
return (IDemoRepository)Activator.CreateInstance(type);
}
public static int GetDemoValue()
{
return _Demo.GetDemoValue();
}
}
}
IDemoRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DemoRepository
{
public interface IDemoRepository
{
int GetDemoValue();
}
}
Class Library: DemoRepository.Devel
Added reference: DemoRepository
DemoRepository.Devel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DemoRepository.Devel
{
public class DemoProvider : IDemoRepository
{
public int GetDemoValue()
{
return (int)12345;
}
}
}
Class Library: DemoRepository.Draft
Added reference: DemoRepository
DemoRepository.Draft.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DemoRepository.Draft
{
public class DemoProvider : IDemoRepository
{
public int GetDemoValue()
{
return (int)98765;
}
}
}