ОК.
Код интерфейсной сборки:
using System;
namespace Mutant
{
public interface IInitializable
{
void Initialize(IServiceProvider serviceProvider);
}
public interface IPlugIn: IInitializable
{
void DoIt();
}
public interface IServer
{
void PrintKarrramba();
}
}
Код сервера:
using System;
using System.Reflection;
namespace Mutant
{
public class Server: IServer, IServiceProvider
{
public Server()
{
Assembly assm = Assembly.LoadFrom("PlugIn.dll");
Type plug_in_type = assm.GetType("Mutant.PlugIn");
IPlugIn plug_in = Activator.CreateInstance(plug_in_type) as IPlugIn;
plug_in.Initialize(this);
plug_in.DoIt();
}
private static void Main()
{
Server server = new Server();
}
public void PrintKarrramba()
{
Console.WriteLine("Karrramba");
}
public object GetService(Type serviceType)
{
if (serviceType == typeof(IServer))
{
return this;
}
return null;
}
}
}
Код плагина:
using System;
namespace Mutant
{
public class PlugIn: IPlugIn
{
private IServer server;
public void Initialize(IServiceProvider serviceProvider)
{
server = serviceProvider.GetService(typeof(IServer)) as IServer;
}
public void DoIt()
{
if (server != null)
{
server.PrintKarrramba();
}
}
}
}
Соответственно на интерфейсную сборку ссылаются и сервер и плагин.
Deny everything...
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение