Engine.cs์์:
if (Options.IsClrAllowed())
{
Global.FastAddProperty("System", new NamespaceReference(this, "System"), false, false, false);
Global.FastAddProperty("importNamespace", new ClrFunctionInstance(this, (thisObj, arguments) =>
{
return new NamespaceReference(this, TypeConverter.ToString(arguments.At(0)));}), false, false, false);
}
}
๊ธฐ๋ณธ์ ์ผ๋ก ์์คํ ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ํธ์ถ์ ์ ๊ฑฐํ๋ฉด ์์คํ ๋ค์์คํ์ด์ค์ ํจ๊ป ์ ๊ณต๋๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ค์ ๋ก ๋ ธ์ถํ์ง ์๊ณ ์ฌ์ฉ์ ์ง์ CLR ํ์์ ๋ ธ์ถํ ์ ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฌ CLR์ ํ์ฉํ ๋ค์ ์์คํ ๋ณ์ ์ค์ ์ ํด์ ํ๊ณ ์์ต๋๋ค.
var e = new Jint.Engine(options =>
{
options.AllowClr(typeof(Foo.Class1).Assembly);
});
e.Global.Properties.Remove("System");
์ฐ๋ ค๋ฅผ ์ดํดํ์ง๋ง ๋์์ AllowClr
์ด(๊ฐ) ์ตํธ์ธ์ด๋ฉฐ ์ด ํตํ์ ๋๋ถ๋ถ์ ์ฉ๋์ ๋ํด System
๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ์
จ๋ค๋ ๋คํ์
๋๋ค.
ํ์ฉ ๋ชฉ๋ก์ ์๋ ์ก์ธ์ค๋ฅผ ์ํ API๋ฅผ ์ถ๊ฐํ ๊ณํ์ด ์์ต๋๊น? ์ ๋ ์ ์ฒด ์์คํ ๋ค์์คํ์ด์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ด ๋ณด์์ ์ข์ง ์์ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ฌ๊ณ ๋ก ๋์ฐํ ์ผ์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋ด ๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ์๋ฐ ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ํน์ .Net ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ/๋๋ ํด๋์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ AllowAssembly ๋๋ AllowClass API๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ฉ ๋ชฉ๋ก์ ์๋ ์ก์ธ์ค๋ฅผ ์ํ API๋ฅผ ์ถ๊ฐํ ๊ณํ์ด ์์ต๋๊น? ์ ๋ ์ ์ฒด ์์คํ ๋ค์์คํ์ด์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ด ๋ณด์์ ์ข์ง ์์ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ฌ๊ณ ๋ก ๋์ฐํ ์ผ์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋ด ๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ์๋ฐ ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ํน์ .Net ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ/๋๋ ํด๋์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ AllowAssembly ๋๋ AllowClass API๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.